zoukankan      html  css  js  c++  java
  • 【简单算法】35.最大子序和

    题目:

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

    解题思路:

    O(N)的解法:

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int res = 0;
            int sum = 0;
            
            res = nums[0];
            for(int i = 1;i < nums.size();++i){
                res = max(nums[i],res);
            }
            
            for(int i = 0;i < nums.size();++i){
                sum += nums[i];
                if(sum >= 0){
                    res = max(res,sum);
                }
                
                if(sum < 0){
                    sum = 0;
                }
            }
            
            return res;
        }
    };

    分治法:

    class Solution {
    public:
        int maxSum(vector<int>& nums,int l,int r){
            int mid = (l+r)/2;
            int sum = 0;
            int leftSum = nums[mid];
            int rightSum = 0;
            int res = 0;
            
            if(l == r){
                return nums[mid];
            }
            
            int maxLeft = maxSum(nums,l,mid);
            int maxRight = maxSum(nums,mid+1,r);
            
            /*left max sub array*/
            for(int i = mid;i>=l;--i){
                sum+=nums[i];
                leftSum = max(leftSum,sum);
            }
            
            /*right max sub array*/
            sum = 0;
            for(int i = mid+1;i <= r;++i){
                sum+=nums[i];
                rightSum = max(rightSum,sum);
            }
            
            return max(leftSum+rightSum,max(maxLeft,maxRight));
        }
        
        int maxSubArray(vector<int>& nums) {
            return maxSum(nums,0,nums.size()-1);
        }
    };
  • 相关阅读:
    babel缓存 非常实用(8)
    source-map 非常实用(7)
    webpack -HMR-非常实用(6)
    eslint 语法检查(5)
    对css 的处理(4)
    python之再学习----简单的字符串
    windows下安装django的具体步骤和各种问题
    Linux常用命令
    转:程序中得到SVN的版本号
    vue实战(1):准备与资料整理
  • 原文地址:https://www.cnblogs.com/mikemeng/p/8998336.html
Copyright © 2011-2022 走看看