题目描述
题目分析
解法分析
贪心法
:如果前面的和大于0,那就说明前面的和是具有增益的,那就保留这个和并加上当前的数字;否则就表示说明总和对结果无增益效果,需要舍弃掉,那么就重置总和为当前的数字。动态规划法
:如果前一个数字大于0,就加上前一个数字,到最后获取最大值
代码
class Solution {
public int maxSubArray(int[] nums) {
if (nums.length == 0) return 0;
int res = nums[0];
int sum = 0;
for (int num : nums){
if (sum > 0){
sum += num;
} else {
sum = num;
}
res = Math.max(res, sum);
}
return res;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
for (int i = 1; i<nums.length; i++){
if (nums[i-1] > 0){
nums[i] += nums[i-1];
}
res = Math.max(res, nums[i]);
}
return res;
}
}