连续子序列的最大和( leetcode 53)

一:解题思路

这道题用动态规划的思想来做,可以将时间复杂度降低为Time:O(n),空间复杂度为:O(1)

二:完整代码示例 (C++版和Java版)

C++版:

class Solution 
 {
 public:
     int max(int a, int b)
     {
         return a>b?a:b;
     }

     int maxSubArray(vector<int>& nums) 
     {
         int maxValue = -2147483648,cur=0;

         for (int i = 0; i < nums.size(); i++)
         {
             cur = cur <= 0 ? nums[i] : (nums[i]+cur);
             maxValue = max(maxValue,cur);
         }

         return maxValue;
     }
 };

Java版:

class Solution
{
    public int maxSubArray(int[] nums)
    {
           int maxValue=Integer.MIN_VALUE;
           int cur=0;

           for(int i=0;i<nums.length;i++)
           {
               cur=cur<=0?nums[i]:(nums[i]+cur);
               maxValue=Math.max(maxValue,cur);
           }

           return maxValue;
    }
}

 

Python方法一:

import sys
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        maxValue=-sys.maxsize - 1
        cur=0
        n=len(nums)
        for i in range(n):
            if cur<=0:
                cur=nums[i]
            else:
                cur=cur+nums[i]
            maxValue=max(maxValue,cur)

        return maxValue

 

这道题其实也还可以扩展一下,求连续子序列的最小和。 

 

posted @ 2020-03-11 16:40  repinkply  阅读(205)  评论(0)    收藏  举报