Găsirea celui de-al treilea cel mai mic număr în Java: un ghid complet

Publicat: 2023-08-23

V-ați întrebat vreodată cum să găsiți eficient al treilea cel mai mic număr dintr-o matrice, listă sau flux de numere întregi? În această postare pe blog, ne vom scufunda în lumea programării Java și vom explora diferite tehnici de identificare a celui de-al treilea cel mai mic număr din diverse surse de date.

Găsirea celui de-al treilea cel mai mic număr în Java - Un ghid cuprinzător

Când lucrați cu manipularea și analiza datelor, apare adesea nevoia de a identifica elemente specifice dintr-o colecție de numere. Găsirea celui mai mic sau cel mai mare număr este relativ simplă, dar determinarea celui de-al treilea cel mai mic număr necesită puțin mai multă finețe. În această postare pe blog, vom acoperi trei metode pentru a rezolva această problemă folosind Java: sortarea unei matrice, sortarea unei liste și utilizarea fluxurilor.

Metoda 1: Sortarea unei matrice

Matricele sunt una dintre structurile fundamentale de date din Java, ceea ce le face un punct de plecare natural pentru explorarea noastră. Ideea aici este de a sorta matricea în ordine crescătoare și apoi de a prelua elementul de la indexul 2.

Metoda 2: Sortarea unei liste

Listele oferă o alternativă mai flexibilă la matrice, permițând redimensionarea dinamică și manipularea mai ușoară. Pentru a găsi al treilea cel mai mic număr dintr-o listă, putem urma o abordare similară a sortării matricei.

Metoda 3: Utilizarea fluxurilor

Fluxurile Java sunt o modalitate puternică de a procesa secvențe de elemente. Putem folosi fluxuri pentru a sorta elementele și apoi pentru a prelua al treilea cel mai mic număr.

Alegerea metodei potrivite

Fiecare metodă are propriile avantaje și cazuri de utilizare. Dacă aveți o matrice la îndemână, metoda de sortare a matricei ar putea fi cea mai eficientă. Listele sunt versatile și oferă mai multă comoditate, în timp ce fluxurile oferă o abordare funcțională și pot gestiona cu ușurință seturi de date mai mari.

Iată un exemplu complet:

CrunchyThirdSmallestNumberFinder.java

 pachet crunchify.com.tutorial;

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

/**
 * @autor Crunchify.com
 * Găsirea celui de-al treilea cel mai mic număr în Java: un ghid cuprinzător
 *
 */

clasa publică CrunchyThirdSmallestNumberFinder {

    // Metoda de a găsi al treilea cel mai mic număr crocant dintr-o matrice
    public static int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.length < 3) {
            throw new IllegalArgumentException ("Matricea ar trebui să conțină cel puțin 3 elemente crunch");
        }

        // Sortează matricea crunchy în ordine crescătoare
        Arrays.sort(crunchArr);
        return crunchArr[2]; // Returnează al treilea cel mai mic element crocant
    }

    // Metoda de a găsi al treilea cel mai mic număr crocant dintr-o listă
    public static int findCrunchyThirdSmallest(List<Integer> crunchList) {
        if (crunchList.size() < 3) {
            throw new IllegalArgumentException ("Lista trebuie să conțină cel puțin 3 elemente crunch");
        }

        // Sortați lista crocantă folosind fluxuri și colectați elementele sortate într-o nouă listă
        List<Integer> sortedCrunchList = crunchList.stream()
                .sortat()
                .collect(Collectors.toList());

        return sortdCrunchList.get(2); // Returnează al treilea cel mai mic element crocant
    }

    // Metodă de a găsi al treilea cel mai mic număr crocant dintr-un flux
    public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // Colectați elementele din fluxul crocant, sortați-le și adunați-le într-o listă
        List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (sortedCrunchList.size() < 3) {
            throw new IllegalArgumentException ("Fluxul ar trebui să conțină cel puțin 3 elemente crunch");
        }

        return sortdCrunchList.get(2); // Returnează al treilea cel mai mic element crocant
    }

    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);

        // Găsiți al treilea cel mai mic numere crocant folosind surse diferite
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // Tipăriți al treilea cel mai mic numere crocant
        System.out.println("Al treilea cel mai mic crocant din arr: " + crunchyThirdSmallestFromArr);
        System.out.println("Al treilea cel mai mic crocant din listă: " + crunchyThirdSmallestFromList);
        System.out.println("Al treilea cel mai mic crocant din flux: " + crunchyThirdSmalestFromStream);
    }
}

Rezultat consola Eclipse:

Doar rulați programul de mai sus în Eclipse IDE sau IntelliJ IDEA și veți avea ca rezultat ca mai jos.

 Al treilea cel mai mic crocant de la arr: 31
Al treilea cel mai mic crocant din listă: 14
Al treilea cel mai mic crocant din flux: 62

Procesul s-a încheiat cu codul de ieșire 0

Există câteva diferențe de performanță de luat în considerare:

În ceea ce privește complexitatea timpului, toate cele trei metode au pași similari de sortare, care au, în general, o complexitate temporală de O(n log n) , unde „n” este numărul de elemente din colecție (matrice, listă sau flux).

Complexitatea de timp a accesării celui de-al treilea element cel mai mic este constantă, O(1) , deoarece este o simplă căutare de matrice sau listă.

  1. Metoda Array: Această metodă sortează matricea în loc, astfel încât nu necesită memorie suplimentară pentru o nouă colecție sortată. Acest lucru poate duce la o utilizare puțin mai bună a memoriei în comparație cu metodele de listă și flux.
  2. Metoda Listă: Această metodă convertește lista într-o listă sortată folosind fluxuri. Deși convenabil, implică crearea unei noi liste, care consumă memorie suplimentară. Acest lucru poate fi o îngrijorare dacă utilizarea memoriei este crucială.
  3. Metoda fluxului: metoda fluxului este destul de flexibilă și funcțională, dar implică colectarea fluxului într-o listă. Acest lucru adaugă o mică suprasarcină în ceea ce privește memoria și procesarea în comparație cu sortarea directă a matricei.

Anunțați-mă dacă vă confruntați cu vreo problemă la rularea acestui cod.