LeetCode刷题之面试题42. 连续子数组的最大和

LeetCode刷题之面试题42. 连续子数组的最大和

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
    要求时间复杂度为O(n)。
  • 示例
示例 1 :
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
  • 提示
    • 1 <= arr.length <= 10^5
    • -100 <= arr[i] <= 100
  • 代码1:
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        for i in range(1, len(nums)):
            nums[i] += max(nums[i-1],0)
        return max(nums)
# 执行用时 :100 ms, 在所有 Python3 提交中击败了28.41%的用户
# 内存消耗 :18.3 MB, 在所有 Python3 提交中击败了100.00%的用户
  • 算法说明:
    动态规划法,采用公式如下:
    d p [ i ] = { d p [ i − 1 ] + n u m s [ i ] , d p [ i − 1 ] > 0 n u m s [ i ] , d p [ i − 1 ] ⩽ 0 dp[i] = \left\{ {\begin{matrix} {dp[i-1]+nums[i] , dp[i-1]>0} \\ {nums[i] , dp[i-1] \leqslant 0} \\ \end{matrix} } \right. dp[i]={ dp[i1]+nums[i],dp[i1]>0nums[i],dp[i1]0
    此处不再详述具体过程。

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/106765600