leetcode最大子序和(python)

leetcode最大子序和(python)

題目

給定一個整數數組 nums ,找到一個具備最大和的連續子數組(子數組最少包含一個元素),返回其最大和。python

示例:數組

輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6。網絡

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/maximum-subarray
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。函數

解題思路

由題可知,須要找到一個最大和的連續子數組,並返回其最大和。既然是一個和,那麼咱們就能夠用兩個變量來表示:max_sumcurrent_sum,其中max_sum用來保存最終的值,而current_sum用來做比較的,就至關於一個。最開始,兩個變量都保存列表的第一個元素的值,而後經過遍歷元素,當我如今保存的和的值比如今元素的值小時,那麼就捨棄原來的保存的值,換成那個較大的元素的值,而後就比較咱們保存的最終的值與如今的那個值,若咱們保存最終的和小於如今的那個數的和,那麼就更新它的值。其中代碼current_sum = max(current_time + num, num)的做用很是重要,首先current_sum + num表示求的是一個子列表的和,而num表示當前的元素,當前一個子列表的和小於改元素,咱們就更新current_sumnum的值,而後開始下一個子列表。整個函數的最關鍵代碼就是這一句。code

代碼

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0:
            print('invalid array list')
            return 

        max_sum = current_sum = nums[0]

        for num in nums[1:]:
            current_sum = max(current_sum + num, num)
            max_sum = max(current_sum, max_sum)
        
        return max_sum
    

Solution().maxSubArray([-2,1,-3,4,-1,2,1,-5,4])
相關文章
相關標籤/搜索