Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы / 25 сообщений из 52, страница 1 из 3
07.09.2016, 03:14
    #39304786
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Задача. Есть массив целых чисел. Необходимо вывести числа из этого массива в порядке частоты их встречаемости в массиве.
К примеру массив 12,2,5,6,6,243,5,6
Вывод будет
6 - 3 раза
5 - 2 раза
12,2,243 - 1 раз.
Ну и конечно - никакого использования коллекций. Только массивы.
Задача то вроде простая, наиболее примитивно - берем двумерный массив и т.д.
Но может есть какое то красивое решение?
...
Рейтинг: 0 / 0
07.09.2016, 05:25
    #39304794
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Задача слишком простая.
Решений масса.
А искать оптимальный/красивый код просто неинтересно.
...
Рейтинг: 0 / 0
07.09.2016, 06:16
    #39304803
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
982183, напишите одно. Если простая задача значит в 10-15 минут уложитесь. Только не блоксхему а рабочий код. Если лень писать, неохота думать - значит задача не заинтересовала. А вы подумайте минуты 3 - вдруг заинтересует.
.
...
Рейтинг: 0 / 0
07.09.2016, 08:47
    #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
07.09.2016, 09:12
    #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
07.09.2016, 09:16
    #39304860
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Код: plaintext
select mas.pole, count(mas.pole) from mas  group by mas.pole order by2 descending
...
Рейтинг: 0 / 0
07.09.2016, 09:17
    #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
07.09.2016, 09:18
    #39304865
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Ну вот, пока писал, уже ответили.
...
Рейтинг: 0 / 0
07.09.2016, 09:43
    #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
07.09.2016, 09:59
    #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
07.09.2016, 10:27
    #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
07.09.2016, 10:32
    #39304940
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
авторкрасивое решение
Уйти в бизнес))
...
Рейтинг: 0 / 0
07.09.2016, 10:35
    #39304942
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Valentin Kolesnikov, хэшмап то конечно. Но тогда на самом деле слишком просто. Но с помощью только массивов. Так же интересней)
...
Рейтинг: 0 / 0
07.09.2016, 10:37
    #39304944
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
myaucha, отлично) Только тут же форум по Java) ну и какое то не универсальное у вас решение. Если массив 10К элементов - кода будет многовато
...
Рейтинг: 0 / 0
07.09.2016, 10:40
    #39304948
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
982183, я не написал в условии но подразумевается что используем только Java. И только массивы. Никаких коллекций, не дай бог фреймворков и даже Arrays.sort(). Вы спросите - "дык нахрена ж так тр@хаться если есть уже готовые средства???" Так то да , в том то и дело - спортивный интерес. Задачка то простая.
...
Рейтинг: 0 / 0
07.09.2016, 10:46
    #39304958
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Сергей Арсеньев, Arrays.sort() то понятно. Но его использовать нельзя) Только ваш код. А то можно и хэшмап залепить и все просто. А насчет использования 2 в степени n...Ээээмм а если (как это бывает) исходный массив из 1000 элементов? Или больше.
...
Рейтинг: 0 / 0
07.09.2016, 11:04
    #39304973
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Zenia, респект! Первый кто выложил попытку решения. Но что то не работает. На исходной выборке результат правильный. Но если добавить в массив новые данные то все ломается. Попробуйте к примеру просто входящий массив удвоить или утроить (просто добавьте те же числа).
...
Рейтинг: 0 / 0
07.09.2016, 11:05
    #39304974
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
pgm300Сергей Арсеньев, Arrays.sort() то понятно. Но его использовать нельзя) Только ваш код.
Обыграть местных в эту игру нельзя потому, что всегда оказывается правило, про которое Вы раньше не знали.

Чем простите Arrays.sort отличается от операций больше,меньше,равно? Он точно так же вшит в платформу. :)
...
Рейтинг: 0 / 0
07.09.2016, 11:22
    #39304994
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Сергей Арсеньев, хорошо) Возражение принимается. Arrays.sort() используйте на здоровье. Но знаете что? Он вам тут мало поможет. Скажем, получили вы массив с элементами и массив с их встречаемостями. Каждому элементу в одном массиве соответствует элемент в другом. Что у вас будет после того как вы отсортируете один из массивов?
...
Рейтинг: 0 / 0
07.09.2016, 11:31
    #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
07.09.2016, 11:35
    #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
07.09.2016, 11:36
    #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
07.09.2016, 11:43
    #39305024
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Zenia, работает) Ну вот скажите - задача на самом деле посложнее чем кажется на первый взгляд. Ну и в 15 минут тут так просто не уложишься
...
Рейтинг: 0 / 0
07.09.2016, 11:45
    #39305028
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
lleming, на java можете? Без использования коллекций
...
Рейтинг: 0 / 0
07.09.2016, 11:51
    #39305035
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересная задачка про массивы
Мне самому задача тем и показалась интересной, что формулировка простая и кажется что можно решить за 5-10 минут. Легко посчитать во втором массиве частоту встречаемости для каждого элемента. Легко вывести ответ сортируя не по частоте встречаемости а по элементам (достаточно просто предварительно отсортировать исходный массив перед подсчетом количества встречаемостей). Но отсортировать по частоте уже сложнее.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Интересная задачка про массивы / 25 сообщений из 52, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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