https://leetcode.cn/problems/maximum-subarray/
题目要求
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。
暴力解法
public int maxSubArray(int[] nums) {
int n = nums.length;
int res = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
int cur = 0;
for (int j = i; j < n; j++) {
cur += nums[j];
res = Math.max(res, cur);
}
}
return res;
}
- 暴力会超时
贪心
class Solution {
public int maxSubArray(int[] nums) {
int res = Integer.MIN_VALUE;
int cur = 0;
for (int num : nums) {
if (cur < 0) cur = num;
else cur += num;
res = Math.max(cur, res);
}
return res;
}
}
- 当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。比较选取最大“连续和”