一、题目:最大子数组和
二、题目解析:
题目解析:找出一个数组当中的子数组,使得子数组返回的和最大。(动态规划题)
- 对于数组当中的每一个元素做出一个抉择
1.1 选择延续之前的数组,把元素加进去
1.2 新开一个数组,把当前元素当做数组的第一个,之前的数组不要了- 判断标准:拿新开数组后加起来的和与之前延续的元素和做比较
- 如果新开的数组和比较大,就不需要延续原来的数组了
- 记录最大值,每个元素做完抉择都需要判断是否需要更新最大值
图解:
三、代码如下:
public int maxSubArr(int[] nums){
int[] res = new int[nums.length];//初始容量
res[0] = nums[0];//当数组里面只有一个数,它就是最大和值
for (int i = 1; i < nums.length; i++) {
res[i] = Math.max(nums[i]+res[i-1],nums[i]); //记录每个位置元素的最大值是多少
}
int maxValue = nums[0];//假设最大值是第一个
System.out.println("res数组:" + Arrays.toString(res));
for (int i = 0; i < res.length; i++) {
maxValue = Math.max(maxValue,res[i]);//遍历每个位置的最大值[当前与前面元素相加结果]
}
return maxValue;
}
四、测试
五、结束