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

560. Subarray Sum Equals K

  • 数据有正有负: 前缀和

    • follow up: 返回所有这样的subarray

    • follow up: array变为一个矩阵

时间复杂度:O(n) 空间复杂度:O(n)

523 Continuous Subarray Sum

918. Maximum Sum Circular Subarray

  • 直接变两倍得到的结果是不正确的,还需要更精细的操作.

  • 解法

    • 普通段: 如53

    • 首尾两段相连: 相当于中间扣掉一段最小, 然后剩余的即最大

152. Maximum Product Subarray

1186. Maximum Subarray Sum with One Deletion

  • 动态规划

  • 前缀和+后缀和

713. Subarray Product Less Than K

Last updated