题目描述
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入: 一个整数数组nums。
输出: 数组中连续子序列的最大和。
求解,代码如下:
class Solution {
public int maxSubArray(int[] nums) {
if (nums==null) return 0;
int[] dp=new int[nums.length];
dp[0]=nums[0];
int maxSum=dp[0];
for (int i = 1; i < nums.length; i++) {
dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
maxSum=Math.max(maxSum,dp[i]);
}
return maxSum;
}
}
分析:
- 初始化变量
n
为数组的长度。 - 创建一个长度为
n
的整数数组dp
,用于存储到当前位置为止的最大子序列和。 - 初始化
dp[0]
为nums[0]
,即数组的第一个元素,并将maxSum
也设置为这个值。 - 遍历数组,从第二个元素开始(索引为1):
- 对于每个位置
i
,计算dp[i]
的值:要么是将当前元素nums[i]
加到前一个位置的最大子序列和上(即dp[i-1] + nums[i]
),要么是只考虑当前元素nums[i]
作为新的子序列的开始。选择两者中的较大值作为dp[i]
的值。 - 更新
maxSum
为当前的最大子序列和和之前的最大子序列和中的较大值。
- 对于每个位置
- 返回
maxSum
作为结果。