>Input: [-2,1,-3,4,-1,2,1,-5,4], >Output: 6 >Explanation: [4,-1,2,1] has the largest sum = 6.
brute force
遍历所有的可能答案,得到最大子序列和。
1 2 3 4 5 6 7 8 9 10
defbrute_force(nums): max_sum = 0 for L inrange(len(nums)):# 左边界 for R inrange(L,len(nums)):# 右边界 cur_sum = 0 for i inrange(L,R): cur_sum+=nums[i] if cur_sum > max_sum: max_sum = cur_sum return max_sum
时间复杂度 $O(n^3)$
改进版穷举
上面的方法,可以改进,去掉最内层的循环。以左边界为起点,记录连续的求和,只取最大的即可。
1 2 3 4 5 6 7 8 9
defbrute_force(nums): max_sum = 0 for L inrange(len(nums)):# 左边界 cur_sum = 0 for R inrange(L,len(nums)): cur_sum+=nums[R] if cur_sum > max_sum: max_sum = cur_sum return max_sum