题目:整数数组中最大和的连续子序列
数组:[-2,1,-3,4,-1,2,1,-5,4]
子序列:[4,-1,2,1]
最大和:6
思路:从数组下标为0的元素开始,往后求和,如果当前和<0,则将和重置为0,每次求和后,与之前和的最大值比较,取最大值。
代码:
public class MaxSum {
public static void main(String[] args) {
int[] num = new int[]{-2,1,-3,4,-1,2,1,-5,4};
int maxSum = getMaxSum(num);
System.out.println(maxSum);
}
//状态转移方程:maxSum=Math.max(num[i], maxSum+num[i]);
private static int getMaxSum(int[] num) {
int max = num[0];
int maxSum = num[0];
for (int i = 1; i < num.length; i++) {
maxSum=Math.max(num[i], maxSum+num[i]);
max=Math.max(max, maxSum);
}
return max;
}
//直接累加判断
private static int getMaxSum2(int[] num) {
int sum = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < num.length; i++) {
sum+=num[i];
if(sum>max)
max=sum;
if(sum<0)
sum=0;
}
return max;
}
}
结果:6