【代码随想录day 27】 力扣 53. 最大子序和
视频讲解:https://www.bilibili.com/video/BV1aY4y1Z7ya/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C.html
力扣题目:https://leetcode.cn/problems/maximum-subarray/
这道题有点抽象,要好好想一想,一般情况下,我们想到的都是正数,正数越加越大,那如果加上负数,情况就不一样了,越加反而可能越小,因此我们主要遵循以下几个原则:
- 如果连续和是负数,抛弃选择下一位开始计算
- result只统计最大值
这很好理解,如果两个数相加是负数,那越加越小,所以索性不要了直接从下一个位置继续加,但是有一种情况容易搞晕,如果是负数的单调递减数组怎么办?其实如果是这种数组,我们的result会记录第一次的最大值,后续并不会更新,所以返回的结果也就是数组的第一个元素。
class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_MIN;int count = 0;for(int i = 0; i< nums.size(); i++){count = count + nums[i];if(count > result){result = count;}if(count <= 0){count = 0;}}return result;}
};