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


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