java - 计算 Java 数组中的非重复匹配对

标签 java arrays sorting

我是 java 的新手,通过我的搜索,我发现了很多关于几乎我正在寻找但不完全是我正在寻找的东西的帖子。 我正在尝试使用基本的 Java 技术来计算数字匹配的 UNIQUE 次数。 例如数组 {2,3,2,3,2} 将有两个唯一的匹配对案例 (2,2) 和 (3,3) 到目前为止(见下面的代码)我似乎能想到的就是计算总共有多少对配对。在示例案例中,结果将是四种情况 (2,2)、(2,2)、(3,3)、(2,2)。需要说明的是,这是第一学期的问题类型,所以我不能使用 Map 或更高级的技术。具有计数和迭代的简单循环。谢谢

int count = 0;
    for( int i=0;i<=hand.length-2 ;i++)
    {
        for( int j=i+1;j<=hand.length-1;j++)
        {
            if (hand[j] == hand[i])
            {

                count = count + 1;
            }
        }
    }
    System.out.println(count);

最佳答案

@azurefrog 已经给出了很好的答案。这是一个实现,它计算给定数量的条目超过 3 个的对:

List<Integer> numbers = Arrays.asList(2, 3, 2, 3, 2, 2, 9);
Map<Integer, Long> map = numbers.stream()
        .collect(Collectors.groupingBy(num -> num, Collectors.counting()))
        .entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() / 2));

// output
map.forEach((num, count) -> System.out.println(String.format("%d has %d unique pairs", num, count)));
Long total = map.values().stream().reduce((acc, c) -> c + acc).get();
System.out.print(String.format("A total of %d pairs", total));

考虑到您在评论中列出的其他约束:不修改原始数据、简单循环、仅“简单”数据结构;

一种方法是跟踪您之前是否见过某个元素(我使用 boolean 数组来执行此操作):

int[] hand = {2,3,2,3,2,9,5,5,5,5,5,5,5};
boolean[] hasPair = new boolean[10];
for(int i = 0; i <= hand.length - 2 ; i++) {
    for(int j= i + 1; j <= hand.length - 1; j++) {
        if (hand[j] == hand[i]) {
            hasPair[hand[j]] = true;
        }
    }
}
int count = 0;
for (boolean b : hasPair) {
    if (b) {
        count += 1;
    }
}
System.out.print(count);

这计算唯一对或“重复”,假设输入数组是 {1, ..., 9} 中的整数

关于java - 计算 Java 数组中的非重复匹配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42183965/

相关文章:

java - 小部件到底是什么?

javascript - Jquery 使用多个文本框、文本框数组

sorting - 按字母顺序获取 map 中的键的简单方法

java - Android TCP 连接到 C 服务器 : String transferred is noisy

java - 如何指定应返回 jax-ws 服务结果的语言?

java - 多个(甚至可能未使用的)jar文件的大型类路径效率低下

c - int *a[5] 是一个包含 5 个指针的数组还是一个指向大小为 5 的数组的指针?

c - 返回字符串数组的函数 C

python 3 : values of a list change when it enters a for loop

c# - 在 C# 中异步使用 IComparer