gpt4 book ai didi

java - 构成最大总和的数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:51 25 4
gpt4 key购买 nike

我刚刚编写了我的程序,它从数组中找到最大和,但我被困在有什么方法可以找到哪些数字对最大总和有贡献吗?

Rule of Maximum sum is given: No adjacent elements should contribute to sum.

我对数组中最大和的解决方案:

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 并记录哪些元素对求和有贡献,但我无法实现。

我做了两个Arraylist:

List<Integer> ex = new ArrayList<>();
List<Integer> inc = new ArrayList<>();

输入:-1 7 8 -5 4输出:12Sum由8+4组成


输入:3 2 1 -1输出:4总和由3+1组成

等....

最佳答案

您可以遵循此代码。

    int toIndex = 3, fromIndex = 0;
List<Integer> result = new ArrayList<>();
while (toIndex < numbers.size()) {
Map<Integer, Integer> map = IntStream
.range(fromIndex, toIndex)
.filter(i->numbers.get(i)>0)
.mapToObj(i -> new AbstractMap.SimpleEntry<>(i, numbers.get(i)))
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey,(a,b)->b));
// find max of sublist
int maxOfSub = numbers.subList(fromIndex, toIndex).stream().max(Integer::compareTo).get();
//update indexes
fromIndex = map.getOrDefault(maxOfSub,toIndex-1) + 2;
toIndex += fromIndex;

if (maxOfSub > 0)
result.add(maxOfSub);
}
int lastMax = numbers.subList(fromIndex, numbers.size()).stream().max(Integer::compareTo).get();
if (lastMax > 0)
result.add(lastMax);
System.out.println(result);
System.out.println(result.stream().reduce(0, Integer::sum));

DEMO

关于java - 构成最大总和的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com