java—在数组中查找相同的元素并防止重复计数

0yg35tkg  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(407)

给定以下代码:

public static int countSames(Object[] a) {
    int count = 0;

    for (int i = 0; i < a.length; i++) {
        for (int k = 0; k < a.length; k++) {
            if (a[i].equals(a[k]) && i != k) {
                count += 1;
                break; //Preventing from counting duplicate times, is there way to replace this?
            }
        }
    }
    return count;
}

我想知道是否有一个解决方案不使用break语句,因为我听过它的坏习惯。但是如果没有中断符,这个方法返回6而不是数组{x','x','x}想要的3。

368yc8dk

368yc8dk1#

如果您试图在数组中找到唯一元素的数量,请尝试使用这种方法,因为它只有一个循环,因此效率很高。

private static int findNUmberOfUnique(String[] array) {
        Set<String> set=new HashSet<>();
        for(int i=0;i<array.length;i++){
            if(!set.contains(array[i])){
                set.add(array[i]);
            }
        }
        return set.size();
    }

如果我不清楚你的要求,请告诉我。

qqrboqgw

qqrboqgw2#

你可以用旗子代替 break :

public static int countSames(Object[] a) {
    int count = 0;
    for (int i = 0; i < a.length; i++) {
        boolean found = false;
        for (int k = 0; k < a.length && !found; k++) {
            if (a[i].equals(a[k]) && i != k) {
                count += 1;
                found = true;
            }
        }
    }
    return count;
}
63lcw9qa

63lcw9qa3#

可以使用hashmap在数组中查找相同的元素并防止重复计数。

class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
    HashSet<Integer>hs=new HashSet<Integer>();
    for(int i:nums1)
        hs.add(i);
    HashSet<Integer>hs1=new HashSet<Integer>();
    for(int j:nums2){ 
    if(hs.contains(j)){
        hs1.add(j);
    }
  }
    int[] res=new int[hs1.size()];
    int j=0;
    for(int k:hs1)
        res[j++]=k;

    return res;

}

}

相关问题