问:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
答:这是一个求最大子数组和的问题,可以使用动态规划来解决。我们可以定义一个数组 dp,其中 dp[i] 表示以第 i 个元素结尾的最大子数组和。状态转移方程为 dp[i] = max(nums[i], dp[i-1] + nums[i])。
public class MaxSubArray {
public int maxSubArray(int[] nums) {
int maxSum = nums[0];
int currentSum = nums[0];
for (int i = 1; i < nums.length; i++) {
currentSum = Math.max(nums[i], currentSum + nums[i]);
maxSum = Math.max(maxSum, currentSum);
}
return maxSum;
}
}