我是 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/