我刚刚写了一个程序,可以从数组中找到最大的总和,但是我卡在了如何找出哪些数字对于最大总和做出了贡献?
给定最大总和的规则:不允许相邻元素对总和进行贡献。
我的解决方案最大总和问题:
public class MaximumELementInARray {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String[] al = reader.nextLine().split(" ");
int[] input = Arrays.stream(al).mapToInt(Integer::parseInt).toArray();
MaximumELementInARray mm = new MaximumELementInARray();
int maxi = mm.maximumm(input);
System.out.println(maxi);
}
public int maximumm(int[] a) {
List<Integer> ex = new ArrayList<>();
List<Integer> inc = new ArrayList<>();
int incl = a[0];
int excl = 0;
int excl_new;
for (int i = 1; i < a.length; i++) {
excl_new = Math.max(incl, excl);
incl = excl + a[i];
excl = excl_new;
}
System.out.println(incl > excl ? inc : ex);
return incl > excl ? incl : excl;
}
}
现在在
maximum
函数中,是否有一个调整的方法可以把构成最大总和的所有元素的索引放入一个数组中?输入:
-1 7 8 -5 4 9 -2 3
输出:
20
**
我需要知道20是如何得到的。答案应该是
8+9+3
**我认为在maximum函数中我们可以放入一个ArrayList并记录哪些元素对总和做出了贡献,但我无法实现。
我已经建立了两个ArrayList:
List<Integer> ex = new ArrayList<>();
List<Integer> inc = new ArrayList<>();
输入:-1 7 8 -5 4 输出:12 这个总和是由8和4组成的
输入:3 2 1 -1 输出:4 这个总和是由3和1组成的
等等...
MaximumELementInARray.maximum
方法,不仅返回结果总和本身,还包括形成它的加数。 - Alex Salauyou