java - 计算 int 数组中唯一对的有效方法

标签 java arrays algorithm int

这是我的第一篇文章,希望它符合网站的发帖指南。 首先要感谢所有社区:几个月来阅读您的文章并学到了很多东西: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 个问题:

  1. 我是否理解如何“衡量”代码的效率?

  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/

相关文章:

java - 以下日期格式化代码线程安全吗?

java - 将整数读入二维数组

c++ - 为什么这个 for 循环条件不起作用?

algorithm - 从有 n 个元素的数组中获取 k 大的元素,其中 n 远大于 k

python - 有效地对列表中的元素进行加权计数

java - sikuli 安装程序未启动

java - 哪个是更合法的递归辅助方法?

algorithm - 来自类属性的唯一、人类可读的 ID

java - 如何将任何类的对象转换为 Java 中的 Map?

php - while循环到数组的转换