LeetCode 刷题【53. 最大子数组和】

53. 最大子数组和

自己做

解:滑动数组

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int begin = 0;
        int end = (int)nums.size() - 1;
        int sum = 0;
        int max = nums[0];

        //剔除左边小于0的部分
        int left_count = 0;
        for(int i = 0; i < (int)nums.size(); i++){
            left_count += nums[i];

            if(left_count > max)   //记录下前面的最大值,可能会出现前面全为正,后面一个很大负数的情况,这样就会造成丢失,这里记录下来
                max = left_count;

            if(left_count < 0){         //找到了负值的部分,更新边界
                begin = i + 1;
                left_count = 0;         //重置计数
            }

        }

        //剔除右边小于0的部分
        int right_count = 0;
        for(int i = (int)nums.size() - 1; i > begin; i--){
            right_count += nums[i];

            if(right_count < 0){         //找到了负值的部分,更新边界
                end = i - 1;
                right_count = 0;         //重置计数
            }
        }

        //情况:如果数组中的元素全是负的(或者相加都为负,或者前面的最大子数组和都比后面找到的大),这里返回其中的最大值
        if(begin >= end || max > sum)
            return max;


        //经过上面处理后得到对应子数组,现在遍历子数组统计
        for(int i = begin; i <= end; i++)
            sum += nums[i];

        return sum;
    }
};
相关推荐
胡萝卜3.02 小时前
数据结构初阶:详解单链表(一)
数据结构·笔记·学习·单链表
艾醒3 小时前
大模型面试题剖析:大模型微调与训练硬件成本计算
人工智能·后端·算法
闪电麦坤953 小时前
数据结构:红黑树(Red-Black Tree)
数据结构··红黑树
啊嘞嘞?3 小时前
力扣(滑动窗口最大值)
算法·leetcode·职场和发展
快递鸟3 小时前
ISV系统开发中物流接口的第三方模块对接:技术选型与集成实践
算法
2501_924879264 小时前
客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
大数据·人工智能·算法·目标检测·计算机视觉·视觉检测·零售
NekoCNN4 小时前
现代视角下的线性表全解
数据结构
工藤新一¹4 小时前
C/C++ 数据结构 —— 树(2)
c语言·数据结构·c++·二叉树··c/c++
北京地铁1号线4 小时前
广告推荐模型2:因子分解机(Factorization Machines, FM)
人工智能·算法·推荐算法