题目
给你一个整数数组
nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
方法一:动态规划
public class MaxSubArray {
public int maxSubArray(int[] nums) {
//动态规划 max(当前值,前一个值加上当前值的结果值)
//[-2,1,-3,4,-1,2,1,-5,4]
//[-2,1,-2,4,3,5,6,1,5]
//最大值,赋初始值
int maxSum = nums[0];
//前一个值
int preNum = nums[0];
for (int i = 1; i < nums.length; i++) {
//当前值
int curNum = Math.max(nums[i], preNum+nums[i]);
maxSum = Math.max(maxSum, curNum);
preNum = curNum;
}
return maxSum;
}
public static void main(String[] args) {
//int[] nums = new int[]{-2,1,-3,4,-1,2,1,-5,4};
//int[] nums = new int[]{1};
int[] nums = new int[]{5,4,-1,7,8};
System.out.println(new MaxSubArray().maxSubArray(nums));
}
}
LeetCode测试结果