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 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
毕竟是shy哥6 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲6 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
圣保罗的大教堂6 小时前
leetcode 1406. 石子游戏 III 困难
leetcode
晊晌_h7 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦7 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考8 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客9 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨12 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F13 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法