powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы
52 сообщений из 52, показаны все 3 страниц
Интересная задачка про массивы
    #39304786
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача. Есть массив целых чисел. Необходимо вывести числа из этого массива в порядке частоты их встречаемости в массиве.
К примеру массив 12,2,5,6,6,243,5,6
Вывод будет
6 - 3 раза
5 - 2 раза
12,2,243 - 1 раз.
Ну и конечно - никакого использования коллекций. Только массивы.
Задача то вроде простая, наиболее примитивно - берем двумерный массив и т.д.
Но может есть какое то красивое решение?
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304794
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача слишком простая.
Решений масса.
А искать оптимальный/красивый код просто неинтересно.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304803
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, напишите одно. Если простая задача значит в 10-15 минут уложитесь. Только не блоксхему а рабочий код. Если лень писать, неохота думать - значит задача не заинтересовала. А вы подумайте минуты 3 - вдруг заинтересует.
.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304835
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300,

Решение при помощи linkedhadhmap:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public static <K, E> Map<K, Integer> countBy(final Iterable<E> iterable, Function1<E, K> func) {
        final Map<K, Integer> retVal = new LinkedHashMap<>();
        for (E e : iterable) {
            final K key = func.apply(e);
            if (retVal.containsKey(key)) {
                retVal.put(key, 1 + retVal.get(key));
            } else {
                retVal.put(key, 1);
            }
        }
        return retVal;
    }



С уважением, Валентин
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304853
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все формальности соблюдены: красиво и коллекции не используются. На все ушло 3 минуты :)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table test (
  id number
)  

insert into test values (12);
insert into test values (2);
insert into test values (5);
insert into test values (6);
insert into test values (6);
insert into test values (243);
insert into test values (5);
insert into test values (6);

select
  id,
  count(id) cnt
from
  test
group by
  id


order by
cnt desc
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304860
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select mas.pole, count(mas.pole) from mas  group by mas.pole order by2 descending
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304863
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaВсе формальности соблюдены: красиво и коллекции не используются. На все ушло 3 минуты :)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table test (
  id number
)  

insert into test values (12);
insert into test values (2);
insert into test values (5);
insert into test values (6);
insert into test values (6);
insert into test values (243);
insert into test values (5);
insert into test values (6);

select
  id,
  count(id) cnt
from
  test
group by
  id


order by
cnt desc


только, наверное, надо не таблицу создавать, а... забыл как там называется, что-то типа временной таблицы, которая в бд потом не сохранится :) И, кстати, не хорошо, что id повторяются)
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304865
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, пока писал, уже ответили.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304892
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicтолько, наверное, надо не таблицу создавать, а... забыл как там называется, что-то типа временной таблицы, которая в бд потом не сохранится :) И, кстати, не хорошо, что id повторяются)

Лучше?! :)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
with q1 as
(
  select 12 id from dual
  union all
  select 2 from dual
  union all
  select 5 from dual
  union all
  select 6 from dual
  union all
  select 6 from dual
  union all
  select 243 from dual
  union all
  select 5 from dual
  union all
  select 6 from dual  
)
select
  id,
  count(*) cnt
from
  q1
group by
  id
order by
  cnt desc  
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304911
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только массивы.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public static void main(String[] args) {
		
		int[] arr = {12,2,5,6,6,243,5,6};
		
		int l = arr.length;
		int max = 0;
		int[] rpl = new int[l];
		for (int i = 0; i < l; i++) {
			rpl[i] = (rpl[i]>0)?rpl[i]:0;
			for (int j = 0; j < l; j++) {
				if(arr[j]==arr[i]) {
					rpl[i]++;
					if(max < rpl[i]) max = rpl[i];
				} 
			}
		}
		
		for (int m = max; m > 0; m--) {
			for (int i = 0; i < l; i++) {
				if(rpl[i]==m) {
					System.out.println( arr[i] + " -> " + m );
					if(m>1) break;
				}
			}
		}
				
	}
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304934
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300Задача то вроде простая, наиболее примитивно - берем двумерный массив и т.д.
Но может есть какое то красивое решение?
Чем тебе двумерный массив то поможет?
Хочешь красиво жить - пожалуйста. :)
Есть у тебя массив на n элементов.
1.Отводишь значит массив размерностью 2^n+1 c объектами (значение, количество).
2.Берешь число из первого массива. Смотришь по середине массива, пусто - добавляешь новый объект со значением из первого массива и количеством 1. Не пусто проверяешь значение. Равно - счетчик увеличиваем, больше идем направо, меньше налево (повторяем с серединой половины массива те же действия).
3.Пройдя весь исходный массив делаем тоже самое с полученным массивом (еще один 2^n+1 пробегаем по непустым (начиная с середины нефиг 2^n сложность то плодить), но в этот раз сравниваем по количеству повторений и больше налево).
4.Пробегаем по полученному массиву и печатаем значения с повторениями.

P.S. На самом деле все гораздо проще:) Arrays.sort() - после чего подсчет количества тривиален. После чего еще один sort (не забыть сделать правильный Comparator).
Можно нести преподу.
:)
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304940
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкрасивое решение
Уйти в бизнес))
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304942
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov, хэшмап то конечно. Но тогда на самом деле слишком просто. Но с помощью только массивов. Так же интересней)
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304944
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
myaucha, отлично) Только тут же форум по Java) ну и какое то не универсальное у вас решение. Если массив 10К элементов - кода будет многовато
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304948
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, я не написал в условии но подразумевается что используем только Java. И только массивы. Никаких коллекций, не дай бог фреймворков и даже Arrays.sort(). Вы спросите - "дык нахрена ж так тр@хаться если есть уже готовые средства???" Так то да , в том то и дело - спортивный интерес. Задачка то простая.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304958
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев, Arrays.sort() то понятно. Но его использовать нельзя) Только ваш код. А то можно и хэшмап залепить и все просто. А насчет использования 2 в степени n...Ээээмм а если (как это бывает) исходный массив из 1000 элементов? Или больше.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304973
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zenia, респект! Первый кто выложил попытку решения. Но что то не работает. На исходной выборке результат правильный. Но если добавить в массив новые данные то все ломается. Попробуйте к примеру просто входящий массив удвоить или утроить (просто добавьте те же числа).
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304974
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300Сергей Арсеньев, Arrays.sort() то понятно. Но его использовать нельзя) Только ваш код.
Обыграть местных в эту игру нельзя потому, что всегда оказывается правило, про которое Вы раньше не знали.

Чем простите Arrays.sort отличается от операций больше,меньше,равно? Он точно так же вшит в платформу. :)
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39304994
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев, хорошо) Возражение принимается. Arrays.sort() используйте на здоровье. Но знаете что? Он вам тут мало поможет. Скажем, получили вы массив с элементами и массив с их встречаемостями. Каждому элементу в одном массиве соответствует элемент в другом. Что у вас будет после того как вы отсортируете один из массивов?
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305005
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в общем, как-то так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
public static void main(String[] args) {
		
		int[] arr = {12,2,5,6,6,243,5,6,6,6,7,6,7,6,7,7,7,6,7,7,7,6,7,243};
		
		int l = arr.length;
		
		int max = 0;
		
		int[] rpl = new int[l];
		
		for (int i = 0; i < l; i++) {
			
			rpl[i] = (rpl[i]>0)?rpl[i]:0;
			
			for (int j = 0; j < l; j++) {
				
				if(arr[j]==arr[i]) {
					
					rpl[i]++;
					
					if(max < rpl[i]) max = rpl[i];
					
				} 
				
			}
			
		}
				
		for (int m = max; m > 0; m--) {
			
			int[] out = new int[l-m];
			int i = 0;
			
			for (int j = 0; j < l; j++) {
				if(rpl[j]==m) {
					
					boolean f = true;
					
					for (int j2 = 0; j2 < i; j2++) {
						if(out[j2] == arr[j]) {
							f = false;
							break;
						}
					}
					
					if(f) {
						out[i++] = arr[j];
						System.out.println( m + " -> " + arr[j] );
					}
					
				}
				
			}
			
		}
			
	}
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305011
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select
un, count(un) as cnt
from unnest(array[12,2,5,6,6,243,5,6]) un
group by 1
order by 1, 2
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305013
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
select
   un, count(un) as cnt
from unnest(array[12,2,5,6,6,243,5,6]) un
group by 1
order by 1, 2 
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305024
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zenia, работает) Ну вот скажите - задача на самом деле посложнее чем кажется на первый взгляд. Ну и в 15 минут тут так просто не уложишься
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305028
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming, на java можете? Без использования коллекций
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305035
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне самому задача тем и показалась интересной, что формулировка простая и кажется что можно решить за 5-10 минут. Легко посчитать во втором массиве частоту встречаемости для каждого элемента. Легко вывести ответ сортируя не по частоте встречаемости а по элементам (достаточно просто предварительно отсортировать исходный массив перед подсчетом количества встречаемостей). Но отсортировать по частоте уже сложнее.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305038
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming, тогда уж как минимум order by 2, 1
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305041
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300Zenia, работает) Ну вот скажите - задача на самом деле посложнее чем кажется на первый взгляд. Ну и в 15 минут тут так просто не уложишься

Не знаю, просто вспомнил эту задачу со школы. Раньше быстро решал, сейчас по чуть-чуть мозг костенеет ..
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305051
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Map<Integer, Long> result = Stream
.of(12,2,5,6,6,243,5,6)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result);
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305056
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300lleming, тогда уж как минимум order by 2, 1

как вам будет угодно. мне более натуральных казался порядок чисел а не частота.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305057
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
Map<Integer, Long> result = Stream
    .of(12,2,5,6,6,243,5,6)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result); 
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305067
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если диапазон значений известен и положительный, то можно создать массив размера этого диапазона и во втором массиве отмечать количество встречаний, ну а потом отсортировать второй массив и вывести на экран
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305170
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300982183, я не написал в условии но подразумевается что используем только Java. И только массивы.
Вот так всегда.
То пуговички перламутровые, то коня с крылышками.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305177
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЕсли диапазон значений известен и положительный, то можно создать массив размера этого диапазона и во втором массиве отмечать количество встречаний, ну а потом отсортировать второй массив и вывести на экран
А зачем тебе диапазон?
Заведи двумерный массив, или два одномерных.
В одной строке ставь значение, во втором количество попаданий.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305301
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, с использованием мапов задача решается в несколько строк как это продемонстрировали несколько человек выше. В этом и интерес.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305307
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
questioner, отсортируете второй массив. А первый? Вам надо вывести пару значений - число+частота его появления отсортированные по частоте появления. Почему именно по частоте-потому что вывод в сортировке по самим числам делается элементарно- предварительной сортировкой исходного массива и затем уже подсчетом частоты
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305333
boris_94263
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
// Заполним
        final int CNT = 30;
        final int[] arr = new Random().ints(CNT, 0, 10).toArray();
        for (int item : arr) System.out.print(item + " ");
        System.out.println();


        // Частота
        final String[] cnt = new String[arr.length];
        final int[] checked = new int[arr.length];

        outer: for (int i = 0; i < arr.length; ++i)
        {
            for (int j = 0; j < checked.length; ++j) if (checked[j] == arr[i]) continue outer;

            int count = 0;
            for (int j = 0; j < arr.length; ++j) if (arr[i] == arr[j]) ++count;
            checked[i] = arr[i];

            if (cnt[count] == null) cnt[count] = String.valueOf(arr[i]);
            else                    cnt[count] += ", " + String.valueOf(arr[i]);
        }

        // Вывод
        for (int i = cnt.length-1; i >= 0; --i)
            if (cnt[i] != null)
                System.out.printf("%40s - %5d раз%n", cnt[i], i);
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305374
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
int[] arr = {2,5,6,6,243,5,6,6,6,7,6,7,6,7,7,7,6,2,7,7,5,7,6,7,243};
		
		int l = arr.length;
		
		int max = 0;
		
		int[] rpl = new int[l];
		
		for (int i = 0; i < l; i++) {
			
			int fnd = -1;
			int cnt = 1;
			
			if(rpl[i]==0) {
			
				for (int j = i; j < l; j++) {
					
					if(arr[j]==arr[i]) {
						
						if(fnd>-1) rpl[fnd] = -1;
						
						rpl[j] = cnt++;
						
						if(max < cnt) max = cnt;
						
						fnd = j;
						
					} 
					
				}
			
			}
			
		}
		
		System.out.println(Arrays.toString(arr));
		
		for (int m = max; m > 0; m--) for (int i=0; i < l; i++) if(rpl[i]==m) System.out.println( arr[i] + " -> " + m );
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305398
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300 Но отсортировать по частоте уже сложнее.
Подсчитать встречаемость это тривиально. (У отсортированного массива и того проще не надо взад вперед бегать, но это была шутка).
Отсортировать по любому полю объекта еще проще, см. выше про Comparator и sort.

Забавно, это как-то так
не делайте так в домашних условиях :)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
import java.util.*;
import java.io.PrintStream;

public class StupidSort {

 public static final long SHIFT = Integer.MIN_VALUE;
 public static final long MULT = Integer.MIN_VALUE*-2l;

 public static long[] sortByCount(int[] a) {
  if ((a==null)||(a.length==0)) return new long[0];
  Arrays.parallelSort(a);
  final int l= a.length;
  long[] r = new long[l];
  int j=0;
  r[j] = a[j]+SHIFT;
  for (int i=1;i<l;i++) {
   if (a[i]==a[j]) {
    r[j] -=MULT;
   } else {
    r[++j] = a[i]+SHIFT;
   }
  }
  long[] res = new long[++j];
  System.arraycopy(r, 0, res, 0, j );
  Arrays.parallelSort(res);
  return res;
 }

 public static void printResult(long[] a, PrintStream o) {
  o.println("Result is:");
  if ((a==null)||(a.length==0)) return;
  for (long l : a) {
   long cn = (l&0xFFFFFFFF00000000l)/-MULT;
   if (cn==0) break;
   o.print("Value :");
   o.print ((int)(l+SHIFT));
   o.print(" count :");
   o.println(cn);
  }
 }

 public static void main(String[] argv) {
  printResult(sortByCount(new int[]{0,0,1,-1,Integer.MAX_VALUE,Integer.MIN_VALUE,Integer.MIN_VALUE,Integer.MIN_VALUE}), System.out);
 }

}

...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305406
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Зря беспричинно оптимизировать начал, на самом деле так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int c = a[j];
  r[j] = a[j]+SHIFT;
  for (int i=1;i<l;i++) {
   if (a[i]==c) {
    r[j] -=MULT;
   } else {
    c=a[i];
    r[++j] = c+SHIFT;
   }
  }

...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305425
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300отсортируете именно по частоте-потому что вывод в сортировке по самим числам делается элементарно- предварительной сортировкой исходного массива и затем уже подсчетом частоты

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Stream
				.of(12,2,5,6,6,243,5,6)
				.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
				.entrySet()
				.stream()
				.sorted(Map.Entry.comparingByValue())
				.map(entry -> {
					System.out.println(entry);
					return entry.getKey();
				})
				.collect(Collectors.toList());
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305448
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming,это работает, но тут все пытаютсякак то без мап обойтись)
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305449
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев, да, вот так работает
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305492
c3p0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного дикий вариант, но почему бы и нет:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        int[] a = {12, 2, 5, 6, 6, 243, 5, 6};
        int[][] hashMap = new int[a.length][];
        for (int n : a) {
            int hash = Objects.hashCode(n) % a.length;
            if (hashMap[hash] == null) {
                hashMap[hash] = new int[]{1};
            } else
                hashMap[hash][0]++;
        }
        for (int i = 0; i < a.length; i++) {
            int max = i;
            int maxHash = Objects.hashCode(a[i]) % a.length;
            for (int j = i + 1; j < a.length; j++) {
                int hash = Objects.hashCode(a[j]) % a.length;
                if (hashMap[hash][0] > hashMap[maxHash][0]) {
                    maxHash = Objects.hashCode(a[j]) % a.length;
                    max = j;
                }
            }
            int t = a[i];
            a[i] = a[max];
            a[max] = t;
        }
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305526
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напишите на лямбдах ))
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305535
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c3p0Немного дикий вариант, но почему бы и нет:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        int[] a = {12, 2, 5, 6, 6, 243, 5, 6};
        int[][] hashMap = new int[a.length][];
        for (int n : a) {
            int hash = Objects.hashCode(n) % a.length;
            if (hashMap[hash] == null) {
                hashMap[hash] = new int[]{1};
            } else
                hashMap[hash][0]++;
        }
        for (int i = 0; i < a.length; i++) {
            int max = i;
            int maxHash = Objects.hashCode(a[i]) % a.length;
            for (int j = i + 1; j < a.length; j++) {
                int hash = Objects.hashCode(a[j]) % a.length;
                if (hashMap[hash][0] > hashMap[maxHash][0]) {
                    maxHash = Objects.hashCode(a[j]) % a.length;
                    max = j;
                }
            }
            int t = a[i];
            a[i] = a[max];
            a[max] = t;
        }



По мне так отличный вариант, гораздо меньше итераций по циклу, чем в примерах до этого
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305565
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300982183, я не написал в условии но подразумевается что используем только Java. И только массивы.
Вы написали на сайте SQL.RU
Что является более сильным приоритетом.
Никто не мешает взять массив и загнать его в таблицу.
Как никто не мешает использовать SQL в Java
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305647
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c3p0Немного дикий вариант, но почему бы и нет:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        int[] a = {12, 2, 5, 6, 6, 243, 5, 6};
        int[][] hashMap = new int[a.length][];
        for (int n : a) {
            int hash = Objects.hashCode(n) % a.length;
            if (hashMap[hash] == null)
                hashMap[hash] = new int[]{1};
            } else
                hashMap[hash][0]++;
        }
        ...

Потому что метод сортировки пузырьком тут явно не в дугу, а то, что остается - написано неправильно, хотя идея хорошая:
- "Objects.hashCode" вот это надо выкинуть и заменить на Math.abs(n) % a.length, чтобы нормально учитывались и отрицательные значения
- ну и хэш-код сам по себе может давать одинаковое значение, что у вас не учитывается в алгоритме; замените, например, исходный массив на int[] a = {8, 16, 12, 2, 5, 6, 6, 243}; и 8 с 16 у вас посчитаются дважды, так как получат одинаковый хеш-код
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305684
adverte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задачка то уже мелькала тут, там и вторая есть
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305784
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант решения 19641739
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305817
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183questionerЕсли диапазон значений известен и положительный, то можно создать массив размера этого диапазона и во втором массиве отмечать количество встречаний, ну а потом отсортировать второй массив и вывести на экран
А зачем тебе диапазон?
Заведи двумерный массив, или два одномерных.
В одной строке ставь значение, во втором количество попаданий.

чтобы по индексу иметь быстрый доступ
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39305835
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adverte, я ее в одной книжке нашел. Наверное сдуто оттуда. Хотя на самом деле задача довольно типовая.
...
Рейтинг: 0 / 0
Интересная задачка про массивы
    #39390982
adverte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pgm300,
она на знание стандартных алгоритмов как оказалось,сейчас наткнулся пересматривая тему про алгоритмы
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]