053. 最大子数组和
2026/4/17小于 1 分钟
053. 最大子数组和
中等解题思路:
- 使用动态规划解决该问题,创建一维数组
dp[],dp[i]表示第 i 个位置为末的最大子数组和 - 对于状态转移方程
dp[i + 1] = Math.max(dp[i],dp[i - 1] + num[i])- 如果
dp[i - 1] < 0,则必然有dp [i - 1] + num[i] < num[i]
- 如果
Java
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
int[] dp = new int[nums.length];
dp[0] = res;
for(int i = 1;i < dp.length;i++){
dp[i] = Math.max(nums[i],dp[i - 1] + nums[i]);
res = Math.max(dp[i],res);
}
return res;
}
}Python
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
max_sum = nums[0]
current_sum = nums[0]
for i in range(1, len(nums)):
current_sum = max(nums[i], current_sum + nums[i])
max_sum = max(max_sum, current_sum)
return max_sum