标签:base 浮点 循环嵌套 bottom 2.4 class 运行 整数 otto
1 public static int maxSubSumCubic(int[] array) { 2 int maxSum = 0; //最大子序列求和 3 //start表示要求和的子序列的开始索引,end表示结束索引 4 for(int start = 0; start < array.length; start++) { 5 for(int end = start; end < array.length; end++) { 6 int thisSum = 0; //当前子序列求和 7 //求出array[start]~array[end]子序列的和 8 for(int index = start; index <= end; index++) { 9 thisSum += array[index]; 10 } 11 //判断是否大于之前得到的最大子序列求和 12 if(thisSum > maxSum) { 13 maxSum = thisSum; 14 } 15 } 16 } 17 return maxSum; 18 }
1 public static int maxSubSumQuadratic(int[] array) { 2 int maxSum = 0; //最大子序列求和 3 //start表示要求和的子序列的开始索引,end表示结束索引 4 for(int start = 0; start < array.length; start++) { 5 int thisSum = 0; //当前子序列求和 6 for(int end = start; end < array.length; end++) { 7 //已求得的array[start]~array[end-1]子序列的和加上array[end] 8 //得到array[start]~array[end]子序列的和 9 thisSum += array[end]; 10 //判断是否大于之前得到的最大子序列求和 11 if(thisSum > maxSum) { 12 maxSum = thisSum; 13 } 14 } 15 } 16 return maxSum; 17 }
1 public static int maxSubSumRec(int[] array, int left, int right) { 2 //递归的基准情况:待处理序列只有一个元素 3 if(left == right) { 4 //空集也算是子序列,空集和为0,所以最大子序列和最小为0 5 if(array[left] > 0) 6 return array[left]; 7 else 8 return 0; 9 } 10 11 //递归求出左半部分和右半部分的最大子序列和 12 int center = (left + right) / 2; 13 int maxLeftSum = maxSubSumRec(array, left, center); 14 int maxRightSum = maxSubSumRec(array, center + 1, right); 15 16 //求出左半部分中包含最右边元素的子序列的最大和 17 int maxLeftBorderSum = 0, leftBorderSum = 0; 18 for(int i = center; i >= left; i--) { 19 leftBorderSum += array[i]; 20 if(leftBorderSum > maxLeftBorderSum) { 21 maxLeftBorderSum = leftBorderSum; 22 } 23 } 24 25 //求出右半部分中包含最左边元素的子序列的最大和 26 int maxRightBorderSum = 0, rightBorderSum = 0; 27 for(int i = center + 1; i <= right; i++) { 28 rightBorderSum += array[i]; 29 if(rightBorderSum > maxRightBorderSum) { 30 maxRightBorderSum = rightBorderSum; 31 } 32 } 33 34 //跨越两个部分的最大子序列和 35 int maxLeftRightSum = maxLeftBorderSum + maxRightBorderSum; 36 37 //maxLeftSum、maxRightSum、maxLeftRightSum中的最大值即为最大子序列和 38 int maxSubSum = 0; 39 maxSubSum = maxLeftSum > maxRightSum ? maxLeftSum: maxRightSum; 40 maxSubSum = maxSubSum > maxLeftRightSum ? maxSubSum: maxLeftRightSum; 41 42 return maxSubSum; 43 }
1 public static int maxSubSumLinear(int[] array) { 2 int maxSum = 0, thisSum = 0; 3 for(int j = 0; j < array.length; j++) { 4 thisSum += array[j]; 5 if (thisSum < 0) { 6 thisSum = 0; 7 } 8 else if(thisSum > maxSum) { 9 maxSum = thisSum; 10 } 11 } 12 return maxSum; 13 }
标签:base 浮点 循环嵌套 bottom 2.4 class 运行 整数 otto
原文地址:http://www.cnblogs.com/blackiesong/p/6076389.html