这是我的第一篇文章,希望它符合网站的发布指南。首先感谢所有社区:几个月来读你并学到了很多:o)
前提:我是 IT 的一年级学生。
这是问题:我正在寻找一种有效的方法来计算给定正 int 数组(这就是我所知道的)中唯一对的数量(恰好出现两次的数字),例如,如果:
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))