这是我的第一篇文章,希望它符合网站的发帖指南。 首先要感谢所有社区:几个月来阅读您的文章并学到了很多东西:o)
前提:我是 IT 的一年级学生。
问题是:我正在寻找一种有效的方法来计算给定正整数数组(这就是我所知道的)中唯一对(恰好出现两次的数字)的数量,例如如果:
int[] arr = {1,4,7,1,5,7,4,1,5};
arr 中唯一对的数量是 3 (4,5,7)。
我在……比方说评估我的提案的效率方面遇到了一些困难。
这是我做的第一个代码:
int numCouples( int[] v ) {
int res = 0;
int count = 0;
for (int i = 0 ; i < v.length; i++){
count = 0;
for (int j = 0; j < v.length; j++){
if (i != j && v[i] == v[j]){
count++;
}
}
if (count == 1){
res++;
}
}
return res/2;
}
这不应该是好的,因为它检查整个给定数组的次数与给定数组中元素的数量一样多...如果我错了请纠正我。
这是我的第二个代码:
int numCouples( int[] v) {
int n = 0;
int res = 0;
for (int i = 0; i < v.length; i++){
if (v[i] > n){
n = v[i];
}
}
int[] a = new int [n];
for (int i = 0; i < v.length; i++){
a[v[i]-1]++;
}
for (int i = 0; i < a.length; i++){
if (a[i] == 2){
res++;
}
}
return res;
}
我想这应该比第一个更好,因为它只检查给定数组的 2 次和 n 数组的 1 次,此时 n 是给定数组的最大值。如果 n 很大,我想可能不太好......
嗯,2 个问题:
我是否理解如何“衡量”代码的效率?
有没有更好的方法来计算给定数组中唯一对的数量?
编辑: 该死的,我刚刚发布,我已经被答案淹没了!谢谢!我会仔细研究每一个,暂时我说我还没有得到涉及 HashMap 的那些:出于我的知识(因此再次感谢您的洞察力:o))
最佳答案
public static void main(String[] args) {
int[] arr = { 1, 4, 7, 1, 5, 7, 4, 1, 5 };
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < arr.length; i++) {
Integer count = map.get(arr[i]);
if (count == null)
map.put(arr[i], 1);
else
map.put(arr[i], count + 1);
}
int uniqueCount = 0;
for (Integer i : map.values())
if (i == 2)
uniqueCount++;
System.out.println(uniqueCount);
}
关于java - 计算 int 数组中唯一对的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14748688/