前言
仅记录学习笔记,如有错误欢迎指正。
题目
求连续子数组的最大和示例
- 输入: arr = [-2,-1,-3,4,-1,2,1,-5,4]
- 输出: 6
解法
dp !!
public static int FindGreatestSumOfSubArray1(int[] arr){
int[] dp = new int[arr.length];
//base case
//dp是以arr[i]结尾的最大子序列和
dp[0] = arr[0];
for(int i = 1;i<arr.length;i++){
dp[i] = Math.max(arr[i],dp[i-1]+arr[i]);
}
int res = Integer.MIN_VALUE;
for(int i =0;i<arr.length;i++){
res = Math.max(res,dp[i]);
}
return res;
}
解法二
非递归的方式 ,感觉更加简洁。public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int max = array[0];
int pre = array[0];
for (int i = 1; i < array.length; i++) {
pre = Math.max(pre + array[i], array[i]);
max = Math.max(max, pre);
}
return max;
}
}