public static void main(String[] args) { int[] array = { 1, -2, 3, 10, -4, 7, 2, -5 ,6, 8, 9}; MaxSum(array, 11); } public static void MaxSum(int[] array, int len) { if (null == array || len <= 0) { return; } int curSum = 0, maxSum = 0; int index_start = 0, index_end = 0; // 初始化子数组最大和下标 for (int i = 0; i < len; i++) { curSum += array[i]; // 累加 if (curSum < 0) { // 当前和小于0,重置为0 curSum = 0; index_start = i + 1; // 调整子数组最大和的开始下标 } if (curSum > maxSum) { // 当前和大于最大和,则重置最大和 maxSum = curSum; index_end = i; // 调整子数组最大和的结束下标 } } if (maxSum == 0) { // 最大和依然为0,说明数组中所有元素都为负值 maxSum = array[0]; index_start = index_end = 0; // 初始化子数组最大和下标 for (int i = 1; i < len; i++) { if (array[i] > maxSum) { maxSum = array[i]; index_start = index_end = i; // 调整子数组最大和下标 } } } // 输出最大和的子数组及其开始、结束下标 for (int i = index_start; i <= index_end; i++) { System.out.print(array[i] + " "); } System.out.println("maxSum: " + maxSum); }