Znajdowanie trzeciej najmniejszej liczby w Javie: kompletny przewodnik

Opublikowany: 2023-08-23

Czy zastanawiałeś się kiedyś, jak skutecznie znaleźć trzecią najmniejszą liczbę w tablicy, liście lub strumieniu liczb całkowitych? W tym poście na blogu zagłębimy się w świat programowania w języku Java i poznamy różne techniki identyfikowania trzeciej najmniejszej liczby w różnych źródłach danych.

Znajdowanie trzeciej najmniejszej liczby w Javie — obszerny przewodnik

Podczas pracy z manipulacją i analizą danych często pojawia się potrzeba zidentyfikowania konkretnych elementów w zbiorze liczb. Znalezienie najmniejszej lub największej liczby jest stosunkowo proste, ale określenie trzeciej najmniejszej liczby wymaga nieco większej finezji. W tym poście na blogu omówimy trzy metody rozwiązania tego problemu za pomocą języka Java: sortowanie tablicy, sortowanie listy i wykorzystanie strumieni.

Metoda 1: Sortowanie tablicy

Tablice są jedną z podstawowych struktur danych w Javie, co czyni je naturalnym punktem wyjścia do naszych eksploracji. Pomysł polega na posortowaniu tablicy w porządku rosnącym, a następnie pobraniu elementu o indeksie 2.

Metoda 2: Sortowanie listy

Listy stanowią bardziej elastyczną alternatywę dla tablic, umożliwiając dynamiczną zmianę rozmiaru i łatwiejszą manipulację. Aby znaleźć trzecią najmniejszą liczbę na liście, możemy zastosować podobne podejście do sortowania tablic.

Metoda 3: Wykorzystanie strumieni

Strumienie Java to potężny sposób przetwarzania sekwencji elementów. Możemy użyć strumieni do sortowania elementów, a następnie pobrania trzeciej najmniejszej liczby.

Wybór właściwej metody

Każda metoda ma swoje zalety i przypadki użycia. Jeśli masz pod ręką tablicę, metoda sortowania tablicy może być najbardziej wydajna. Listy są wszechstronne i zapewniają większą wygodę, podczas gdy strumienie zapewniają podejście funkcjonalne i z łatwością radzą sobie z większymi zbiorami danych.

Oto kompletny przykład:

CrunchyThirdSmallestNumberFinder.java

 pakiet crunchify.com.tutorial;

importuj java.util.Arrays;
importuj java.util.List;
importuj java.util.stream.Collectors;
importuj java.util.stream.Stream;

/**
 * @autor Crunchify.com
 * Znajdowanie trzeciej najmniejszej liczby w Javie: obszerny przewodnik
 *
 */

klasa publiczna CrunchyThirdSmallestNumberFinder {

    // Metoda znajdowania trzeciej najmniejszej liczby w tablicy
    public static int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.length < 3) {
            rzucaj nowy wyjątek IllegalArgumentException("Tablica powinna zawierać co najmniej 3 elementy crunch");
        }

        // Posortuj chrupiącą tablicę w kolejności rosnącej
        Tablice.sort(crunchArr);
        zwróć crunchArr[2]; // Zwraca trzeci najmniejszy chrupiący element
    }

    // Metoda znajdowania trzeciej najmniejszej liczby na liście
    public static int findCrunchyThirdSmallest(List<Integer> crunchList) {
        if (crunchList.size() < 3) {
            rzucaj nowy wyjątek IllegalArgumentException("Lista powinna zawierać co najmniej 3 elementy crunch");
        }

        // Posortuj chrupiącą listę za pomocą strumieni i zbierz posortowane elementy w nową listę
        List<Integer> sortedCrunchList = crunchList.stream()
                .posortowane()
                .collect(Kolekcjonerzy.toList());

        zwróć posortowanąCrunchList.get(2); // Zwraca trzeci najmniejszy chrupiący element
    }

    // Metoda znajdowania trzeciej najmniejszej liczby w strumieniu
    public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // Zbierz elementy z chrupiącego strumienia, posortuj je i zbierz na listę
        List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (sortedCrunchList.size() < 3) {
            rzucaj nowy wyjątek IllegalArgumentException("Strumień powinien zawierać co najmniej 3 elementy krytyczne");
        }

        zwróć posortowanąCrunchList.get(2); // Zwraca trzeci najmniejszy chrupiący element
    }

    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);
        Strumień<Integer> crunchStream = Strumień.of(427, 53, 71, 99, 25, 62);

        // Znajdź trzecią najmniejszą liczbę, korzystając z różnych źródeł
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // Wydrukuj trzecią najmniejszą liczbę
        System.out.println("Crunchy trzeci najmniejszy z tablicy: " + crunchyThirdSmallestFromArr);
        System.out.println("Crunchy trzeci najmniejszy z listy: " + crunchyThirdSmallestFromList);
        System.out.println("Crunchy trzeci najmniejszy ze strumienia: " + crunchyThirdSmallestFromStream);
    }
}

Wynik konsoli Eclipse:

Po prostu uruchom powyższy program w Eclipse IDE lub IntelliJ IDEA, a otrzymasz wynik jak poniżej.

 Chrupiący trzeci najmniejszy z arr: 31
Chrupiący trzeci najmniejszy z listy: 14
Chrupiący trzeci najmniejszy ze strumienia: 62

Proces zakończył się kodem zakończenia 0

Należy wziąć pod uwagę pewne różnice w wydajności:

Pod względem złożoności czasowej wszystkie trzy metody mają podobne etapy sortowania, które zazwyczaj mają złożoność czasową O(n log n) , gdzie „n” to liczba elementów w kolekcji (tablica, lista lub strumień).

Złożoność czasowa dostępu do trzeciego najmniejszego elementu jest stała, O(1) , ponieważ jest to proste wyszukiwanie w tablicy lub liście.

  1. Metoda Array: Ta metoda sortuje tablicę w miejscu, więc nie wymaga dodatkowej pamięci dla nowej posortowanej kolekcji. Może to prowadzić do nieco lepszego wykorzystania pamięci w porównaniu z metodami listowymi i strumieniowymi.
  2. Metoda listy: Ta metoda konwertuje listę na listę posortowaną za pomocą strumieni. Choć jest to wygodne, wymaga utworzenia nowej listy, co zajmuje dodatkową pamięć. Może to stanowić problem, jeśli użycie pamięci ma kluczowe znaczenie.
  3. Metoda strumieniowa: Metoda strumieniowa jest dość elastyczna i funkcjonalna, ale polega na zebraniu strumienia na listę. Dodaje to niewielki narzut w zakresie pamięci i przetwarzania w porównaniu z bezpośrednim sortowaniem tablicy.

Daj mi znać, jeśli napotkasz jakiekolwiek problemy z uruchomieniem tego kodu.