Поиск третьего наименьшего числа в Java: полное руководство
Опубликовано: 2023-08-23Вы когда-нибудь задумывались, как эффективно найти третье наименьшее число в массиве, списке или потоке целых чисел? В этом сообщении блога мы окунемся в мир программирования на Java и рассмотрим различные методы определения третьего наименьшего числа в различных источниках данных.

При работе с данными и их анализе часто возникает необходимость идентифицировать конкретные элементы внутри набора чисел. Найти наименьшее или наибольшее число относительно просто, но определение третьего наименьшего числа требует немного большей ловкости. В этом сообщении блога мы рассмотрим три метода решения этой проблемы с помощью Java: сортировку массива, сортировку списка и использование потоков.
Способ 1: сортировка массива
Массивы — одна из фундаментальных структур данных в Java, что делает их естественной отправной точкой для нашего исследования. Идея здесь состоит в том, чтобы отсортировать массив в порядке возрастания, а затем получить элемент с индексом 2.
Способ 2: сортировка списка
Списки представляют собой более гибкую альтернативу массивам, позволяя динамически изменять размер и упрощая манипулирование. Чтобы найти третье наименьшее число в списке, мы можем применить аналогичный подход к сортировке массива.
Метод 3: Использование потоков
Потоки Java — это мощный способ обработки последовательностей элементов. Мы можем использовать потоки для сортировки элементов, а затем получить третье наименьшее число.
Выбор правильного метода
Каждый метод имеет свои преимущества и варианты использования. Если у вас под рукой есть массив, метод сортировки массива может быть наиболее эффективным. Списки универсальны и более удобны, а потоки обеспечивают функциональный подход и позволяют легко обрабатывать большие наборы данных.
Вот полный пример:
CrunchyThirdSmallestNumberFinder.java
пакет crunchify.com.tutorial;
импортировать java.util.Arrays;
импортировать java.util.List;
импортировать java.util.stream.Collectors;
импортировать java.util.stream.Stream;
/**
* @author Crunchify.com
* Поиск третьего наименьшего числа в Java: подробное руководство
*
*/
общественный класс CrunchyThirdSmallestNumberFinder {
// Метод для поиска третьего наименьшего числа в массиве
public static int findCrunchyThirdSmallest(int[] crunchArr) {
если (crunchArr.length <3) {
throw new IllegalArgumentException("Массив должен содержать как минимум 3 элемента crunch");
}
// Сортируем массив в порядке возрастания
Arrays.sort(crunchArr);
вернуть crunchArr[2]; // Возвращаем третий наименьший хрустящий элемент
}
// Метод для поиска третьего наименьшего числа в списке
public static int findCrunchyThirdSmallest(List<Integer> crunchList) {
если (crunchList.size() <3) {
throw new IllegalArgumentException("Список должен содержать не менее 3 элементов crunch");
}
// Сортируем подробный список с помощью потоков и собираем отсортированные элементы в новый список
List<Integer> sortedCrunchList = crunchList.stream()
.sorted()
.collect(Коллекторы.toList());
return sortedCrunchList.get(2); // Возвращаем третий наименьший хрустящий элемент
}
// Метод для поиска третьего наименьшего числа в потоке
public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
// Собираем элементы из хрустящего потока, сортируем их и собираем в список
List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList());
если (sortedCrunchList.size() <3) {
throw new IllegalArgumentException("Поток должен содержать как минимум 3 элемента crunch");
}
return sortedCrunchList.get(2); // Возвращаем третий наименьший хрустящий элемент
}
public static void main(String[] args) {
int[] crunchArr = {35, 62, 28, 31, 13, 97};
List<Integer> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328);
Stream<Integer> crunchStream = Stream.of(427, 53, 71, 99, 25, 62);
// Находим третье наименьшее число, используя разные источники
int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest (crunchStream);
// Выводим четкие третьи наименьшие числа
System.out.println("Crunchy третий наименьший из arr: " + crunchyThirdSmallestFromArr);
System.out.println("Crunchy третий наименьший из списка: " + crunchyThirdSmallestFromList);
System.out.println("Третий наименьший поток из потока: " + crunchyThirdSmallestFromStream);
}
}Результат консоли Eclipse:
Просто запустите вышеуказанную программу в Eclipse IDE или IntelliJ IDEA, и вы получите результат, как показано ниже.

Хрустящий третий по размеру из обр: 31 Хрустящие третьи по величине из списка: 14 Crunchy третий по величине из потока: 62 Процесс завершен с кодом завершения 0
Следует учитывать некоторые различия в производительности:
С точки зрения временной сложности все три метода имеют схожие этапы сортировки, которые обычно имеют временную сложность O(n log n) , где 'n' — количество элементов в коллекции (массив, список или поток).
Временная сложность доступа к третьему наименьшему элементу постоянна, O(1) , поскольку это простой поиск в массиве или списке.
- Метод массива. Этот метод сортирует массив на месте, поэтому для новой отсортированной коллекции не требуется дополнительная память. Это может привести к немного лучшему использованию памяти по сравнению с методами списка и потока.
- Метод списка: этот метод преобразует список в отсортированный список с использованием потоков. Это удобно, но предполагает создание нового списка, что требует дополнительной памяти. Это может стать проблемой, если использование памяти имеет решающее значение.
- Метод потока. Метод потока довольно гибок и функционален, но он предполагает сбор потока в список. Это добавляет небольшие накладные расходы с точки зрения памяти и обработки по сравнению с прямой сортировкой массива.
Дайте мне знать, если у вас возникнут какие-либо проблемы при запуске этого кода.
