#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 SetmySet = 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); } }
Комментариев нет:
Отправить комментарий