我们如何在数组中找到唯一对?

时间:2018-05-08 21:55:02

标签: arrays

查找数组中与S. Forex相加的所有唯一元素对。如果array = {2,4,6,4,6}且S = 8,那么答案是{(2,6),(4,4)}。我知道一个解决方案来打印数组中的所有对但是怎么做我们打印出独特的对吗?

2 个答案:

答案 0 :(得分:0)

不确定您是否在寻找一些不同的语法或方法,但我确信应该有一些lambda表达式解决方案能够以更高级的方式解决您的问题。

a = [1, 2, 3, 4, 5]
pairs = []
append_flag = True
S = 6

for index1, element1 in enumerate(a):
  for index2, element2 in enumerate(a):
    if index1 != index2 and (element1 + element2) == S:
      append_flag = True
      for p in pairs:
        if ( (p[1] == element1 and p[0] == element2) or (p[0] == element1 and p[1] == element2) ):
         append_flag = False      
      if append_flag:
        pairs.append( [element1,element2] )

print pairs

这适用于python

答案 1 :(得分:0)

我在java中的实现包含开头的排序,并在不进行比较的情况下找到一个元素。

public final class Pair {

    private final int first;
    private final int second;

    public Pair(int first, int second) {
        this.first = first;
        this.second = second;
    }

}

public static List<Pair> findUniquePairs(int[] arr, int s) {
    List<Pair> pairs = new ArrayList<>();
    Arrays.sort(arr);

    for (int i = 0; i < arr.length - 1; i++) {
        if (arr[i] >= s)
            break;

        Set<Integer> tmp = new HashSet<>();

        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] >= s)
                break;
            if (arr[i] + arr[j] != s || tmp.contains(arr[j]))
                continue;
            tmp.add(arr[j]);
            pairs.add(new Pair(arr[i], arr[j]));
        }
    }

    return pairs;
}