Găsirea celui de-al treilea cel mai mic număr în Java: un ghid complet
Publicat: 2023-08-23V-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.
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ă.
- 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.
- 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ă.
- 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.