53. Maximum Subarray
https://leetcode.com/problems/maximum-subarray/
solution
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
res = -float('inf')
prefix_sum = 0
for num in nums:
prefix_sum = max(prefix_sum + num, num) # 要么选这个数,要么不选
res = max(res, prefix_sum)
return res前缀和+贪心
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
maxSum = float('-inf')
currentSum = 0
for num in nums:
currentSum += num
if currentSum > maxSum:
maxSum = currentSum
if currentSum < 0:
currentSum = 0
return maxSum时间复杂度:O(n) 空间复杂度:O(1)
动态规划
以nums[i]为结尾 的最大连续子序列和为dp[i]
空间复杂度可以优化为O(1)
时间复杂度:O(n) 空间复杂度:O(n)
follow up
数据有正有负: 前缀和
follow up: 返回所有这样的subarray
follow up: array变为一个矩阵
时间复杂度:O(n) 空间复杂度:O(n)
918. Maximum Sum Circular Subarray
直接变两倍得到的结果是不正确的,还需要更精细的操作.
解法
普通段: 如53
首尾两段相连: 相当于中间扣掉一段最小, 然后剩余的即最大
1186. Maximum Subarray Sum with One Deletion
动态规划
前缀和+后缀和
Last updated