题1:连续子数组的最大和
题目描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
示例
输入
[1,-2,3,10,-4,7,2,-5]
返回值
18
说明
输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。
解析:
-
首次看到这题时,没有注意到对 时间复杂度 的要求,立刻想到要用暴力循环的方法来求解
-
对于数组,是求其连续子数组的和,即可以从索引为0的元素开始遍历
-
原始数组 [1,-2,3,10,-4,7,2,-5] 以索引为0开头的子数组: [1],[1,-2],[1,-2,3]... 以索引为1开头的子数组: [-2],[-2,3],[-2,3,10]... ...以此类推并遍历出全部子数组的组合并求和
-
具体代码:
public int FindGreatestSumOfSubArrayWithViolence(int[] array) { if(array.length == 1){ return array[0]; } //当前子数组的和 int currentSubSum; //设一个(假的)最大子数组和 int maxSubSum=array[0]; // 遍历子数组的和进行比较 for(int i =0; i < array.length; i++){ for (int j = i; j < array.length; j++){ // 当前子数组和 currentSubSum = 0; for (int k = i; k <= j; k++){ currentSubSum += array[k
-