给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
第一种方法:
class Solution {
public int maxSubArray(int[] nums) {
//动态规划
int pre = 0, ans = nums[0] ;
for(int num : nums){
pre = pre+num > num ? pre+num : num ;
ans = ans > pre ? ans : pre ;
}
return ans ;
}
}
这道题是动态规划的典型题目。
pre是指前面n个数的最大值,如果加上num,比num大,则pre编程pre+num,反之变成num。(注意这里是跟num比较,不是跟pre比较)。
再找到ans和pre中较大的那个。
时间复杂度O(n)
空间复杂度O(1)
还有一种分治策略,我还要再看看,有点不理解。