Leetcode練習(Python):數組類:第53題:給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。進階: 如果你已經實現復雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。


題目:

給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。進階:  如果你已經實現復雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。

思路:貪心法和分而治之

程序1:貪心發

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        length = len(nums)
        auxiliary = nums[0]
        temp_result = nums[0]

        for index in range(1,length):
            auxiliary = max(nums[index], auxiliary + nums[index])
            temp_result = max(auxiliary, temp_result)
        
        result = temp_result
        return result
程序2:分而治之
官方思路示圖:
 

 

 

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        length = len(nums)
        if length <= 1:
            return nums[0]
        left = self.maxSubArray(nums[0 : len(nums) // 2])
        right = self.maxSubArray(nums[len(nums) //2 : len(nums)])

        middle_left = nums[len(nums) // 2 - 1]
        auxiliary_1 = 0
        for index1 in range(len(nums) // 2 - 1, -1, -1):
            auxiliary_1 += nums[index1]
            middle_left = max(middle_left, auxiliary_1)
        
        middle_right = nums[len(nums) // 2]
        auxiliary_2 = 0
        for index2 in range(len(nums) // 2, len(nums), 1):
            auxiliary_2 += nums[index2]
            middle_right = max(middle_right, auxiliary_2)
        
        middle = middle_left + middle_right

        result = max(left, right, middle)

        return result


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 [java實現]找一個數組的最大和的連續子數組(時間復雜度 O(n)) 輸入一個整形數組(可能有正數和負數),求數組中連續子數組(最少有一個元素)的最大和。要求時間復雜度為O(n)(解決) Leetcode練習(Python):數組類:第128題:給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間復雜度為 O(n)。 Leetcode練習(Python):數組類:第152題:給你一個整數數組 nums ,請你找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字)。 Leetcode練習(Python):數組類:第34題:給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間復雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。 python實現連續子數組的最大和 Leetcode練習(Python):數組類:第209題:給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。 Leetcode練習(python):第414題:第三大的數:給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間復雜度必須是O(n)。 連續子數組最大和 找出一個整數數組的和最大的連續子數組
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM