Maximum Subarray
题目链接:
https://leetcode.cn/problems/maximum-subarray/?favorite=2cktkvj
Given an integer array nums, find the
subarray with the largest sum, and return its sum.
Example 1:
1 | Input: nums = [-2,1,-3,4,-1,2,1,-5,4] |
Example 2:
1 | Input: nums = [1] |
Example 3:
1 | Input: nums = [5,4,-1,7,8] |
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
解题思路:
定义一个数组 dp,其中 dp[i] 表示以第 i 个元素结尾的最大子数组和。
对于第 i 个元素,如果 dp[i-1] 大于 0,则 dp[i] = dp[i-1] + nums[i],否则 dp[i] = nums[i]。
也就是 dp[i] = max(dp[i-1] + nums[i], nums[i])
源代码:
1 | func maxSubArray(_ nums: [Int]) -> Int { |
该算法的时间复杂度为 O(n),其中 n 是数组 nums 的长度。空间复杂度为 O(n),因为我们需要使用一个数组来保存 dp 数组的值。我们也可以将空间复杂度优化到 O(1),只需要使用两个变量来保存当前的 dp[i] 和最大子数组和即可。