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;
    }
};
相关推荐
梓䈑4 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
Adios7946 小时前
设置交集大小至少为2
数据结构·算法·leetcode
来一碗刘肉面13 小时前
栈的应用(表达式求值)
数据结构·算法
xiaowang1234shs14 小时前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
小果因子实验室14 小时前
量化研究--策略迁移算法1研究
算法
Web极客码14 小时前
如何用三段式确定性剪枝,为 LLM Agent 砍掉 35% 的 Token 成本?
服务器·人工智能·算法·机器学习
程序猿乐锅15 小时前
【数据结构与算法 | 第六篇】力扣1109,1094差分数组
java·算法·leetcode
wabs66615 小时前
关于图论【广度优先搜索的理论基础】
算法·图论·宽度优先
孤魂23315 小时前
逻辑回归算法
算法·机器学习·逻辑回归