zoukankan      html  css  js  c++  java
  • LeetCode53:Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
    the contiguous subarray [4,−1,2,1] has the largest sum = 6.

    一:动态规划的解法

    初始状态A[i]表示以小标i结尾的子数组的最大和和,

    那么A[i+1]=max{A[i],0}+nums[i]

    输出结果为max{A[i]}。

    时间复杂度是O(n)。空间复杂度是O(1)。

    runtime:12ms。

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

    二:分治法

    这道题还能够使用分治法来求解。
    分治法的说明例如以下图:

    时间复杂度是o(nlogn),空间复杂度是o(1)。
    runtime:16ms
    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            
            return divide(nums,0,nums.size()-1);
        }
        
        int divide(vector<int> & nums,int left,int right)
        {
            if(left==right)
                return nums[left];
            if(left>right)
                return numeric_limits<int>::min();
            int mid=left+(right-left)/2;
            int sum=0;
            int leftMax=0;
            for(int i=mid-1;i>=left;i--)
            {
                sum+=nums[i];
                leftMax=max(leftMax,sum);
            }
            sum=0;
            int rightMax=0;
            for(int i=mid+1;i<=right;i++)
            {
                sum+=nums[i];
                rightMax=max(rightMax,sum);
            }
            int tmp=leftMax+rightMax+nums[mid];
            return max(tmp,max(divide(nums,left,mid-1),divide(nums,mid+1,right)));
        }
    };




  • 相关阅读:
    .htaccess 文件不起作用?| (Apache Rewrite)
    Putty 如何解决中文乱码(笔记)
    如何删除鼠标右键“发送到”的多余项
    开发环境搭建笔记
    Javascript String 包
    第十五章:使用canvas绘图
    慕课css3 2章边框和3章颜色相关
    第5章引用类型
    第一章 JavaScript简介
    第五章引用类型(Object类型、Array类型)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7084260.html
Copyright © 2011-2022 走看看