Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Test {
- // Здесь будут храниться наши три минимальные числа.
- static int min[] = {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE};
- // Обновляем массив `min` имея новое число-кандидат в минимум.
- static void updateMin(int x) {
- // Перебираем текущие минимальные числа.
- for (int i = 0; i < 3; ++i) {
- if (x < min[i]) {
- // Новое число меньше рассматриваемого из `min`.
- // Сдвигаем текущее и последующие числа, чтобы освободить место
- // для нового.
- for (int j = 2; j > i; --j)
- min[j] = min[j - 1];
- // Вставляем новое число на полагающееся ему место.
- min[i] = x;
- // Дело сделано.
- return;
- } else if (x == min[i]) {
- // Новое число равно рассматриваемому из `min`.
- // Заканчиваем, т.к. такое число уже есть среди минимальных.
- return;
- }
- // Иначе переходим к следующему числу из `min`
- }
- }
- public static void main(String[] args) {
- int loc[] = {25, 11, 250, 5, 45, 8, 10, 45, 31, 123, 489};
- // Находим три минимальных числа.
- for (int i = 0; i < loc.length; ++i)
- updateMin(loc[i]);
- // Выводим их
- // (проверка на MAX_VALUE на случай, если минимальных чисел окажется
- // меньше трех).
- for (int i = 0; i < 3 && min[i] != Integer.MAX_VALUE; ++i)
- System.out.println(min[i]);
- }
- }
- public static <T extends Comparable<T>> List<T> leastDistinctN(Collection<T> input, int n) {
- assert n > 0;
- PriorityQueue<T> pq = new PriorityQueue<>(Collections.reverseOrder());
- for(T t : input) {
- if(pq.isEmpty())
- pq.add(t);
- else if(pq.peek().compareTo(t) > 0 && !pq.contains(t)) {
- if(pq.size() == n)
- pq.poll();
- pq.add(t);
- }
- }
- List<T> list = new ArrayList<>(pq);
- Collections.sort(list);
- return list;
- }
- System.out.println(leastDistinctN(Arrays.asList(5, 3, 4, 1, 0, 1, 10, 8), 3)); // [0, 1, 3]
- public static void main(String[] args) {
- int [] loc = {25, 11, 250,5, 45,8,10,45,31,123,489};
- for(int i = 0; i < loc.length; i ++) {
- for (int j = loc.length-1; j >i ; j--) {
- if (loc[j] < loc[j - 1]) {
- int temp = loc[j];
- loc[j] = loc[j - 1];
- loc[j - 1] = temp;
- }
- }
- }
- for(int i = 0; i < 3; i ++) {
- System.out.println(loc[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement