贪心算法理论基础:
局部最优推全局最优
贪心无套路~
没有什么规律~
重点:每个阶段的局部最优是什么?
题目描述:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
解题思路:贪心算法,详细思路在注释中有~
代码实现:
class Solution {
/**
* 解题思路:贪心算法:当 加上一个数发现比当前连续和(sum)要小的时候直接舍掉,就从下一个正数重新开始计算
* 注意:连续和是负数的时候丢弃,而不是遇到负数就丢弃
* 暴力法:时间复杂度 O(n^2)
* 贪心算法:时间复杂度 O(n)
*/
public int maxSubArray(int[] nums) {
int len = nums.length;
int sum = 0;// 连续和
int maxSubSum = Integer.MIN_VALUE;// 最大连续和
for (int i = 0; i < len; i++) {
sum += nums[i];
if (sum > maxSubSum){
maxSubSum = sum;
}
if (sum < 0){
sum = 0;// 更新 sum=0
}
}
return maxSubSum;
}
}