class Solution: def maxSubArray(self, nums) -> int:#分治法 if len(nums)<2: return nums[0] #边界条件 l_nums=nums[:len(nums)//2] #左边序列 r_nums=nums[len(nums)//2:] #右边序列 l_maxSubArray=self.maxSubArray(l_nums)#递归求解左边序列 r_maxSubArray=self.maxSubArray(r_nums)#递归求解左边序列 #跨界 temp=0 max_l=nums[len(nums)//2-1] for i in range(len(nums)//2-1,-1,-1): temp+=nums[i] max_l=max(temp,max_l) max_r=nums[len(nums)//2] temp=0 for i in range(len(nums)//2,len(nums)): temp+=nums[i] max_r=max(temp,max_r) #返回三者中的最大值 return max(l_maxSubArray,r_maxSubArray,max_l+max_r)
分治算法,看了别人的才做出来。
执行用时 :172 ms, 在所有 Python3 提交中击败了10.63%的用户
内存消耗 :14.9 MB, 在所有 Python3 提交中击败了5.04%的用户
效果却不怎么好。。。
但是人家聪明的人只需要两三行就写出来了:
class Solution: def maxSubArray(self, nums) -> int: for i in range(1 ,len(nums)): submaxnum =max(nums[i]+nums[i-1],nums[i]) nums[i] =submaxnum print(nums) return max(nums)
我好蠢。。。。
——2019.9.29