Ошибка в алгоритме выявление 2ух минимальных чисел в массиве

181
09 января 2020, 04:20

Формат ввода Первая строка входного файла содержит целое число N — количество дроидов (), вторая строка — N целых чисел. Формат вывода Выведите два числа: первым — наименьший серийный номер дроида (которого поэтому следует утилизировать в первую очередь), а вторым — второй по минимальности.

Я написал код

import java.util.Scanner;
 public class Main {
public static void main(String[] args) {
    int min = Integer.MAX_VALUE;
    int min1 = Integer.MAX_VALUE;

    Scanner in = new Scanner(System.in);
    int a = in.nextInt();
    int[] droids = new int[a];
    for (int i = 0; i < a; i++) {
        droids[i] = in.nextInt();
    }
    for (int i = 0; i < a; i++) {
        if (droids[i] < min) {
            min = droids[i];
            for (int j = 0; j < a; j++) {
                if (droids[i] != droids[j]) {
                    if (min <= droids[j]) {
                        if (droids[j] < min1) {
                            min1 = droids[j];
                        }
                    }
                }

            }
        }

        System.out.println(min);
        System.out.println(min1);

    }
}
}

когда мы вводим во вторую входную строку 2 одинаковых числа, то он выводит только одно, например если мы введем 1 22 1 выведет 1,22 не понимаю почему, ведь я думал, что это исключу этой строкой if (droids[i] != droids[j])

Примечания: При решении этой задачи нельзя пользоваться стандартными функциями и методами min, index, sort, sorted и т. д.

Естественно, можно пользоваться функциями min, max, которые принимают два числа.

Answer 1

Цикл в цикле. Да-a-a. Компьютер старательно жужжит и греет плохоприспособленное помещение. Можно сделать в лоб - за два прохода, запомнив индекс первого минимума. Но мы сделаем за один.

for (int i = 0; i < a; i++) {
  int current = droids[i];
  if (current < min) {
    min1 = min;
    min = current;
  } else if (current < min1) {
    min1 = current;
  }
}

var droids = [1, 22, 1]; 
var a = droids.length; 
var min = min1 = 4e9; 
 
for (var i = 0; i < a; i++) { 
  var current = droids[i]; 
  if (current < min) { 
    min1 = min; 
    min = current; 
  } else if (current < min1) { 
    min1 = current; 
  } 
} 
 
console.log(min, min1);

PS: Неплохой вопрос для интервью.

READ ALSO
JAVA, IntelliJ IDEA и ошибка Exception in thread &ldquo;AWT-EventQueue-0&rdquo; java.lang.NullPointerException

JAVA, IntelliJ IDEA и ошибка Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

Я очень, очень глупый новечёкУ меня есть ошибка но нет решения(((( A Google отказываеться помогать(((( Пожалуйста, сделайте это за него

172
JDA Discord. Бот ожидает ответа от юзера

JDA Discord. Бот ожидает ответа от юзера

Пишу Discord бот с помощью библиотеки JDA и столкнулся с достаточно банальной проблемой

163
Как проверить существование видео youtube?

Как проверить существование видео youtube?

Например, есть поле ввода для ссылки, пользователь вводит и нажимает добавить, и если видео существует, то возврощает true

135
Не получается создать SSL подключение к Bitstamp на java с помощью протокола Fix

Не получается создать SSL подключение к Bitstamp на java с помощью протокола Fix

Всем привет! Возникла проблема при подключении к Bitstamp для получения мгновенной информации с биржиДелаю простенькое sslsocket соединение, но выдает...

157