Description

Given an integer array nums, find the subarray with the largest sum, and return its sum.

1
2
3
4
5
Example 1:

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: The subarray [4,-1,2,1] has the largest sum 6.
1
2
3
4
5
Example 2:

Input: nums = [1]
Output: 1
Explanation: The subarray [1] has the largest sum 1.
1
2
3
4
5
Example 3:

Input: nums = [5,4,-1,7,8]
Output: 23
Explanation: The subarray [5,4,-1,7,8] has the largest sum 23.
1
2
3
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104

Approach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dp = [0] * len(nums)
pre = 0

for i in range(len(nums)):
cur = pre + nums[i]
dp[i] = cur
pre = cur

max_val = float('-inf')
min_val = 0

for i in range(len(nums)):
max_val = max(max_val, dp[i] - min_val)
min_val = min(min_val, dp[i])

return max_val
1
2
3
4
5
6
7
8
9
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
dp = [0] * len(nums)
dp[0] = nums[0]

for i in range(1, len(nums)):
dp[i] = max(nums[i], dp[i-1] + nums[i])

return max(dp)
1
2
3
4
5
6
7
8
9
10
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
cur = nums[0]
max_sum = nums[0]

for i in range(1, len(nums)):
cur = max(nums[i],cur+nums[i])
max_sum = max(max_sum, cur)

return max_sum
1
2
3
4
5
6
7
8
9
10
11
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
maxsum = float('-inf')
s = 0
for i in nums:
s+=i
if s>maxsum:
maxsum = s
if s<0:
s=0
return maxsum