Java'da 3. En Küçük Sayıyı Bulma: Tam Bir Kılavuz
Yayınlanan: 2023-08-23Bir dizide, listede veya tamsayı akışında üçüncü en küçük sayıyı verimli bir şekilde nasıl bulacağınızı hiç merak ettiniz mi? Bu blog yazısında Java programlama dünyasına dalacağız ve çeşitli veri kaynaklarındaki üçüncü en küçük sayıyı tanımlamaya yönelik farklı teknikleri keşfedeceğiz.

Veri manipülasyonu ve analizi ile çalışırken, genellikle bir sayı koleksiyonundaki belirli öğeleri tanımlama ihtiyacı ortaya çıkar. En küçük veya en büyük sayıyı bulmak nispeten basittir ancak üçüncü en küçük sayıyı belirlemek biraz daha ustalık gerektirir. Bu blog yazısında, Java kullanarak bu sorunu çözmeye yönelik üç yöntemi ele alacağız: bir diziyi sıralamak, bir listeyi sıralamak ve akışları kullanmak.
Yöntem 1: Diziyi Sıralama
Diziler Java'daki temel veri yapılarından biridir ve onları araştırmamız için doğal bir başlangıç noktası haline getirir. Buradaki fikir, diziyi artan düzende sıralamak ve ardından öğeyi dizin 2'den almaktır.
Yöntem 2: Listeyi Sıralama
Listeler, dizilere göre daha esnek bir alternatif sunarak dinamik yeniden boyutlandırmaya ve daha kolay manipülasyona olanak tanır. Bir listedeki üçüncü en küçük sayıyı bulmak için dizi sıralamaya benzer bir yaklaşım izleyebiliriz.
Yöntem 3: Akışları Kullanma
Java akışları, öğe dizilerini işlemenin güçlü bir yoludur. Öğeleri sıralamak ve ardından üçüncü en küçük sayıyı almak için akışları kullanabiliriz.
Doğru Yöntemi Seçmek
Her yöntemin kendine göre avantajları ve kullanım durumları vardır. Elinizde bir dizi varsa dizi sıralama yöntemi en verimli yöntem olabilir. Listeler çok yönlüdür ve daha fazla kolaylık sunarken, akışlar işlevsel bir yaklaşım sağlar ve daha büyük veri kümelerini kolaylıkla işleyebilir.
İşte tam bir örnek:
CrunchyThirdSmallestNumberFinder.java
paket crunchify.com.tutorial; Java.util.Arrays'i içe aktarın; Java.util.List'i içe aktarın; java.util.stream.Collectors'ı içe aktarın; Java.util.stream.Stream'i içe aktarın; /** * @yazar Crunchify.com * Java'da 3. En Küçük Sayıyı Bulma: Kapsamlı Bir Kılavuz * */ genel sınıf CrunchyThirdSmallestNumberFinder { // Bir dizideki en küçük üçüncü sayıyı bulma yöntemi public static int findCrunchyThirdSmallest(int[] crunchArr) { if (crunchArr.length < 3) { throw new IllegalArgumentException("Dizi en az 3 crunch öğesi içermelidir"); } // Çıtır dizisini artan düzende sıralayın Arrays.sort(crunchArr); crunchArr'ı döndür[2]; // Üçüncü en küçük çıtır elemanı döndür } // Listedeki en küçük üçüncü sayıyı bulma yöntemi public static int findCrunchyThirdSmallest(List<Integer> crunchList) { if (crunchList.size() < 3) { throw new IllegalArgumentException("Liste en az 3 crunch öğesi içermelidir"); } // Akışları kullanarak gevrek listeyi sıralayın ve sıralanan öğeleri yeni bir listede toplayın List<Integer> sortedCrunchList = crunchList.stream() .sıralanmış() .collect(Collectors.toList()); sortedCrunchList.get(2)'yi döndür; // Üçüncü en küçük çıtır elemanı döndür } // Bir akıştaki en küçük üçüncü sayıyı bulma yöntemi public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) { // Çıtır akıştaki öğeleri toplayın, sıralayın ve bir listede toplayın List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList()); if (sortedCrunchList.size() < 3) { throw new IllegalArgumentException("Yayın en az 3 crunch öğesi içermelidir"); } sortedCrunchList.get(2)'yi döndür; // Üçüncü en küçük çıtır elemanı döndür } 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); // Farklı kaynakları kullanarak üçüncü en küçük sayıları bulun int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr); int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList); int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream); // Çıtır üçüncü en küçük sayıları yazdır System.out.println("Çıtır üçüncüden en küçük arr: " + gevrekThirdSmallestFromArr); System.out.println("Listeden üçüncü en küçük çıtır: " + crunchyThirdSmallestFromList); System.out.println("Akıştan üçüncü en küçük çıtır: " + crunchyThirdSmallestFromStream); } }
Eclipse Konsolu Sonucu:
Yukarıdaki programı Eclipse IDE veya IntelliJ IDEA'da çalıştırmanız yeterlidir; sonuç aşağıdaki gibi olacaktır.

Çıtır çıtır üçüncü en küçük arr: 31 Listedeki en küçük üçüncü çıtır: 14 Akıştan üçüncü en küçük çıtır: 62 İşlem çıkış kodu 0 ile tamamlandı
Dikkate alınması gereken bazı performans farklılıkları vardır:
Zaman karmaşıklığı açısından, üç yöntemin tümü benzer sıralama adımlarına sahiptir; bunlar genellikle O(n log n)
zaman karmaşıklığına sahiptir; burada 'n', koleksiyondaki (dizi, liste veya akış) öğelerin sayısıdır.
Üçüncü en küçük öğeye erişmenin zaman karmaşıklığı sabittir, O(1)
çünkü bu basit bir dizi veya liste aramasıdır.
- Dizi Yöntemi: Bu yöntem diziyi yerinde sıralar, dolayısıyla yeni bir sıralanmış koleksiyon için ek bellek gerektirmez. Bu, liste ve akış yöntemleriyle karşılaştırıldığında biraz daha iyi bellek kullanımına yol açabilir.
- Liste Yöntemi: Bu yöntem, akışları kullanarak listeyi sıralı bir listeye dönüştürür. Uygun olsa da, ek bellek tüketen yeni bir liste oluşturmayı içerir. Bellek kullanımı çok önemliyse bu endişe verici olabilir.
- Akış Yöntemi: Akış yöntemi oldukça esnek ve işlevseldir ancak akışın bir liste halinde toplanmasını içerir. Bu, diziyi doğrudan sıralamaya kıyasla bellek ve işleme açısından küçük bir ek yük ekler.
Bu kodu çalıştırırken herhangi bir sorunla karşılaşırsanız bana bildirin.