题目:整数数组中最大和的连续子序列
数组:[-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

本文介绍了一种寻找整数数组中具有最大和的连续子序列的算法。通过两个方法实现:一是利用状态转移方程进行迭代;二是采用直接累加并判断的方法。最终输出最大子序列的和。
6045

被折叠的 条评论
为什么被折叠?



