贪心算法:每一个阶段局部最优,从而达到全局最优,不像动态规划一样需要具有前后逻辑关系的状态转移方程。
思路:
将问题分解为若干个子问题
找出适合的贪心策略,本题为从num[ i ]开始向后相加,如果结果<=0,则说明不是局部最优解。
求解子问题最优解,当结果<=0,从该位置重新开始相加,因为遇见负数一定拉低总和
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length == 1){
return nums[0];
}
int sum = Integer.MIN_VALUE; //不为0 是以为防止全是负数的情况发生
int count = 0; //用来计算局部最优解的值
for(int i = 0;i<nums.length;i++){
count = count + nums[i];
sum = Math.max(sum,count); //利用sum值输出最大值
if(count <= 0){ //当count <= 0 时,已经不满足局部最优解了,重新开始计算
count = 0;
}
}
return sum;
}
}