Страницы

Поиск по вопросам

пятница, 6 марта 2020 г.

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

#java


Напишите метод uniqueCount, который будет находить количество уникальных чисел в
массиве. Если число повторяется больше одного раза, то его стоит учитывать, но только
один раз. Длина массива > 0.

Пример:


  Входящие данные  {11, 12, 10, 5, 4, 44, 100, 44, 11, 10, 11}
  
  Ответ 7
  
  Объяснение
  Массив без повторений будет выглядеть 4, 5, 10, 11, 12,
  44, 100 - длина 7.


Помогите с решением задачи.

Мой вариант:

public static void main(String[] args) {
    int[] array = {11, 12, 10, 5, 4, 44, 100, 44, 11, 10, 11, 3};
    System.out.println(uniqueCount(array));
}

static int uniqueCount(int[] array) {
    int result = 0;
    int countUnique = 0;
    int count = 0;
    for (int i = 0; i < array.length; i++) {
        countUnique++;
        for (int j = i + 1; j < array.length; j++) {
            if (array[j] == array[i]) {
                count++;
            }
        }
    }
    return result = countUnique - count;
} 


Но ответ на единицу меньше, чем должен быть. Не понимаю где ошибка моя. Наверное
неправильно задаю j, откуда начинать сравнивать элементы.
    


Ответы

Ответ 1



Ваш алгоритм не учитывает, что числа могут повторяться больше, чем два раза - 11 в Вашем случае. for (int j = i+1; j < array.length; j++) { if (array[j] == array[i]) { count++; break; } }

Ответ 2



Можно решить через множество, которое исключает возможность иметь дубликаты: int[] array = {11, 12, 10, 5, 4, 44, 100, 44, 11, 10, 11, 3}; System.out.println(array.length); // 12 Set mySet = new HashSet<>(); for (int x : array) { mySet.add(x); } System.out.println(mySet.size()); // 8 Или аналогично через список и проверку наличия элемента: List myList = new ArrayList<>(); for (int x : array) { if (!myList.contains(x)) myList.add(x); } System.out.println(myList.size()); // 8 Ну если обернуть один из алгоритмов в функцию: static int uniqueCount(int[] array) { Set mySet = new HashSet<>(); for (int x : array) { mySet.add(x); } return mySet.size(); } ... int[] array = {11, 12, 10, 5, 4, 44, 100, 44, 11, 10, 11, 3}; System.out.println(array.length); // 12 System.out.println(uniqueCount(array)); // 8

Ответ 3



Как вариант без использования коллекций или библиотек: public class x { public static void main(String[] args) { int[]x = new int[]{1,1,1,2,2,2,1,3,1,2,5,4}; System.out.println(uniqueCount(x)); } public static int uniqueCount(int[]array){ int[] copy = new int[array.length]; int res = 0; int countNum = 0; int count = 0; for (int i = 0; i

Ответ 4



O(array.length + max_num) ~ O(n+const) int histo [] = new int [max_num]; int [] array = int[] array = {11, 12, 10, 5, 4, 44, 100, 44, 11, 10, 11, 3}; for(int i =0; i < array.length; i++)histo[array[i]]++; int summ = 0 for(int i =0; i < histo.length;i++){ num = histo[i]; if(num >0) summ++; } System.out.println(summ);

Ответ 5



import java.util.Scanner; import java.util.Random; class Z2{ public static void main(String[] args){ String mass[]=new String[5]; String mass2[]=new String[5]; int kol=0,kol_tmp=0; Random rnd=new Random(); //Заполнение массива mass случайными числами for(int i=0;i<=mass.length-1;i++){ mass[i]=String.valueOf(rnd.nextInt(1)); } //Подсчёт количества for(int i=0;i<=mass.length-1;i++){ kol_tmp=0; for(int j=0;j<=mass.length-1;j++){ if(mass[i].equals(mass2[j])) kol_tmp++; } if(kol_tmp==0){ mass2[kol]=mass[i]; kol++; } } //Вывод массива1 System.out.println("mass"); for(int i=0;i<=mass.length-1;i++){ System.out.print(mass[i]+" "); } System.out.println(""); //Вывод массива2 System.out.println("mass2"); for(int i=0;i<=mass.length-1;i++){ System.out.print(mass2[i]+" "); } System.out.println("\nКоличество различных элементов ="+kol); } }

Комментариев нет:

Отправить комментарий