powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы
25 сообщений из 52, страница 1 из 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
25 сообщений из 52, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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