Поиск одинаковых элементов в массиве и предотвращение повторного подсчета - PullRequest
0 голосов
/ 13 февраля 2020

Учитывая следующий код:

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 вместо требуемого 3 для массива {'x', 'x', 'x'}.

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Если вы пытаетесь найти количество уникальных элементов в массиве, попробуйте использовать этот подход, поскольку он имеет только один l oop и, следовательно, эффективен.

    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();
    }

Дайте мне знать, если я сделал не понимаю ваше требование ясно.

0 голосов
/ 13 февраля 2020

Вы можете использовать хэш-карту, чтобы найти те же элементы в массиве и предотвратить подсчет дубликатов.

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;

}

}

0 голосов
/ 13 февраля 2020

Вы всегда можете использовать флаг вместо 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;
}
...