题目
给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解法
动态规划(DP)
思路
用一个数组来存储每次每个位置的最大值,每个位置有两种选择
- 当前的数字是能起到
帮助
作用的,就是前面的最大值加上当前的自己
当前的自己
是拖后脚的,放弃自己,并且把自己的位置写上前面总结出来的最大值
代码
class Solution {
public int maxSubArray(int[] nums) {
int max=nums[0];
for(int i = 1;i<nums.length;i++) {
// 直接原地处理,取nums 来存就好,不需要再新建数组
nums[i] = Math.max(nums[i-1]+nums[i],nums[i]);
max = Math.max(max,nums[i]);
}
return max;
}
}