【发布时间】:2019-05-20 10:51:24
【问题描述】:
我刚刚编写了从数组中找到最大和的程序, 但我被困在了有什么方法可以找到哪些数字对最大总和有贡献?
给出了最大和的规则:没有相邻元素应该贡献 总结。
我对数组中最大和的解决方案:
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
**
我相信在最大函数中我们可以放置一个 Arraylist 并记录哪些元素对 sum 有贡献,但我无法实现。
我做了两个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组成
等等……
【问题讨论】:
-
先生,最大和是根据和中不应有相邻元素的规则计算的。
-
在您的情况下,最大金额是多少?您不是说总和最大的子集吗?对于您的示例,
7+8+(-5)+4+9? -
先生,最大总和是正确的,在我的情况下,我是否可以标记哪些元素对最大总和有贡献?
-
您正在尝试解决一项任务,即找到与给定数字相加的子集,这在一般情况下是 NP 完全的,通常通过动态规划来解决。更好的解决方案是修改
MaximumELementInARray.maximum方法,不仅返回结果总和本身,还返回形成它的被加数。 -
@AlexSalauyou ,我会喜欢这个解决方案和方法。