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