gpt4 book ai didi

java - 迭代 TreeSet 而不重复解决方案

转载 作者:行者123 更新时间:2023-11-30 06:17:20 24 4
gpt4 key购买 nike

我正在组合 3 个不同的值来给出请求的总和,在本例中,请求的总和为 0。
我找不到使用 2 个 for 循环迭代 TreeSet 的方法来接收一组 3 个数字,无需重复该解决方案。我想通过使用 TreeSet 的 contains 方法获取第三个数字。

到目前为止,这是我的代码,它提供了很好的解决方案,但它重复了它们。

import java.util.*;

public class Tree
{
public static void main(String[] args)
{
TreeSet<Integer> ts = new TreeSet<>();
int array[] = {-5, 1, -4, 6, 2, 3, 9, 5};

int sumSearching = 0;
int valueSearching;

for(int i = 0; i < array.length; i++)
ts.add(array[i]);

for(Integer i: ts)
{
for(Integer j : ts)
{
if(i != j)
{
valueSearching = sumSearching - (i + j);
if(valueSearching != i && valueSearching != j)
if(ts.contains(valueSearching))
System.out.println("Solution: "
+ i + ", " + j + ", " + valueSearching);
}
}
}
}
}

感谢您的帮助!

最佳答案

求 j > i,消除一个对称性。

这不排除 {i, j, valueSearching} 上的 double ,因为涉及负数。因此需要维护所有解决方案。

    Set<Set<Integer>> solutions = new HashSet<>();
for (int i: ts)
{
for (int j : ts.tailSet(i, false))
{
valueSearching = sumSearching - (i + j);
if (valueSearching != i && valueSearching != j)
if (ts.contains(valueSearching)) {
Set<Integer> solution = new TreeSet<>();
Collections.addAll(solution, i, j, valueSearching);
if (solutions.add(solution)) {
System.out.println("Solution: "
+ i + ", " + j + ", " + valueSearching);
}
}
}
}

另请注意:对于整数,i != j 最好是 i.intValue() != j.intValue(),因为仅在 -128 范围内。 127 数字的对象是唯一的。

这里简单地使用了int基元类型,这是更合适的。另外,Set.tailSet(value, Exclusive) 给出了值之后的集合。使用迭代器可能会更有效。

关于java - 迭代 TreeSet 而不重复解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48947159/

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