Подсчет уникальных чисел в массиве

124
12 июля 2019, 01:40

Программа должна подсчитывать уникальные чисел в массиве, например

input:
{1, 1, 3, 4, 4, 4, 5, 5, 6}
output:
2

Код:

public static void main(String[] args) {
    int[] znamka = {1, 2, 3, 1, 2, 2, 3, 1, 5};
    System.out.println(Diff(znamka));
}
public static int Diff(int[] znamka){
        ArrayList<Integer> ArrUnique = new ArrayList<Integer>();
        int values=0;
        for (int num : znamka) {
            if (!ArrUnique.contains(num)) ArrUnique.add(num);
        }
        values = ArrUnique.size();
        if (values == 1) values = 0;
        return values;
    }

Пожалуйста подскажите, можно ли написать без ArrayList, если да, то как?

Answer 1

Не совсем понял вопроса... вопрос можно трактовать двояко. В первом случае все просто: Arrays.stream(znamka).distinct().count();

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

final Map countMap = new HashMap<>();
Arrays.stream(znamka).forEach(value -> countMap.put(value, ((countMap.get(value)==null)?1:countMap.get(value)+1))); long count = countMap.keySet().stream().filter(t -> countMap.get(t)==1).count();

READ ALSO
Поиск повторяющихся чисел в графе

Поиск повторяющихся чисел в графе

Дан массив A длины (n+1), содержащий натуральные числа от 1 до nНайти любой повторяющийся элемент за время O(n), не изменяя массив и не используя...

136
Как устранить Утечку Памяти

Как устранить Утечку Памяти

Здорова всемЗа ранее я извиняюсь, Я не силён на русском языке

160
Можно выбрать 2 элемента навигации слайдера за раз

Можно выбрать 2 элемента навигации слайдера за раз

Я использую slick slider для каруселькиНа тач девайсах я могу выбрать сразу 2 элемента навигации по слайдеру (2 точки)

172