zoukankan      html  css  js  c++  java
  • Leetcode 53. 最大子序和

    地址  https://leetcode-cn.com/problems/maximum-subarray/

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
    
    示例:
    
    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
    进阶:
    
    如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
    

    解答

    以l=0开始   从左往右扫描

    如果当前和大于等于零 那么l之前的元素和 对于连续子数组和的增加是有利的 就继续累加

    如果当前和小于零 那么之前的元素和 对于连续子数组和的增加是不利的 可以考虑抛弃 以当前l作为起点 重新计算累加和

    每次循环 记录当前最大和 和历史记录最大和 记录和较大的那一个

    代码如下

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int ret = -INT_MAX;
            int l=0;int sum=0;
            while(l < nums.size()){
                if(sum <0){
                    sum = nums[l];
                }else{
                    sum+=nums[l];
                }
                l++;
                if(sum > ret) ret = sum;
            }    
    
            return ret;
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    1059 C语言竞赛
    1058 选择题
    1057 数零壹
    1056 组合数的和
    1055 集体照
    Mysql--分库分表
    Mysql--改表结构
    Mysql--开始阶段
    Mysql--常用语句
    Mysql--grant授权
  • 原文地址:https://www.cnblogs.com/itdef/p/12821878.html
Copyright © 2011-2022 走看看