题目如下:
解题思路:
利用滑动窗口的思想,遍历一遍数组,用一个 total 计数器记录当前窗口的数值,用 res 记录滑动窗口最大值。
- 从头开始遍历数组,每当新加入一个元素,将taotal加上该元素后与该元素值比较大小:
- 若大于该元素,将当前元素加入滑动窗口;并比较toatal、taotal+nums[]、res值,更新res最大结果值
- 若小于该元素,只可能有一种情况 total(负数) + nums[i](正数) < nums[i](正数),即更新当前滑动窗口从元素 nums[i] 开始;并比较nums[i]、res值,更新res最大结果值。
代码如下:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int total = nums[0]; //滑动窗口计数器
int res = total;
for(int i = 1; i < nums.size(); i++)
{
if(total + nums[i] > nums[i]){
int tt = max(total, total + nums[i]);
res = max(res, tt);
total = total + nums[i];
}
else{ //只有一种情况,total(负数) + nums[i](正数) < nums[i](正数)
total = nums[i]; //更新滑动窗口计数器
res = max(res, total);
}
}
return res;
}
};