博客主页:Skylar Lin
望本文能够给您带来一定的帮助,如果有错误的地方敬请斧正!
新人博主🧑,希望多多支持🍺,还有好多库存和大家分享🎁。
转载需注明出处和原作🌹。
最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
提示:
-
1 <= nums.length <= 105
-
-104 <= nums[i] <= 104
做题感想
这道题的代码很简单,明白之后感觉也就那样儿;但是,隔一段时间后再拿出来做,又会不知如何下手。
原因可能是答案没有用到 dp 数组吧,但是不管有没有使用到 dp 数组,原理上是一致的。
遍历数组中的每一个元素,对于每一个元素 nums[i]
,我们有两种选择:要么将 nums[i]
加入到当前的子数组中,要么以 nums[i]
作为新的子数组的开始。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = 0;
int res = nums[0];
for(int &n : nums){
// 用 sum 记录当前的子数组和
sum = max(sum + n, n);
// res 记录最大的子数组和
res = max(res, sum);
}
return res;
}
};