Вместо того, чтобы проходить по одному и тому же массиву во вложенных циклах (O (n ^ 2) время), вычисляя дубликаты, как это
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
if(arr[i]==arr[j])
{
count++;
}
}
check.put(arr[i], count);
count=0;
}
Вы можете увеличить значение карты для каждого числа в массиве. Примерно так:
for (int item: arr) {
if (check.containsKey(item)) {
check.put(item, check.get(item) + 1);
} else {
check.put(item, 1);
}
}
В конце концов, получается карта, где каждый ключ является числом из массива, а каждое значение ключа является счетчиком того, сколько раз это число появляется в массиве. Например для массива
[1, 2, 3, 4, 2, 3, 4, 5]
карта будет выглядеть как
{1 -> 1, 2 -> 2, 3 -> 2, 4 -> 2, 5 -> 1}
Это также выполняется за O (n), если вы используете HashMap вместо TreeMap.
Для сортировки вывода вы можете использовать TreeSet вместо ArrayList.