题目

53. 最大子数组和_算法

分析

思路1:动态规划

思路2:贪心算法
局部最优:当前连续和为负数的时候就放弃,从下一个元素重新计算连续和(因为负数加上连续和会越来越小)。
全局最优:局部最优的情况下,记录最大连续和,推出全局最优。

代码

class Solution {
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
dp[0] = nums[0];
int result = dp[0];
for(int i = 1;i < nums.length;i++){
dp[i] = Math.max(nums[i],dp[i-1]+nums[i]);
if(dp[i] > result) result = dp[i];
}
return result;
}
}

53. 最大子数组和_最小值_02

class Solution {
public int maxSubArray(int[] nums) {
int count = 0;
//防止全是负数情况,将结果设置为最小值。
int result = Integer.MIN_VALUE;
for(int i = 0;i < nums.length;i++){
count += nums[i];
if(count > result) result = count;
if(count <= 0) count = 0;
}
return result;
}
}

53. 最大子数组和_贪心算法_03