Menemukan Angka Terkecil ke-3 di Java: Panduan Lengkap

Diterbitkan: 2023-08-23

Pernahkah Anda bertanya-tanya bagaimana cara menemukan angka terkecil ketiga dalam array, daftar, atau aliran bilangan bulat secara efisien? Dalam postingan blog ini, kita akan mendalami dunia pemrograman Java dan menjelajahi berbagai teknik untuk mengidentifikasi bilangan terkecil ketiga di berbagai sumber data.

Menemukan Angka Terkecil ke-3 di Java - Panduan Komprehensif

Saat bekerja dengan manipulasi dan analisis data, sering kali muncul kebutuhan untuk mengidentifikasi elemen tertentu dalam kumpulan angka. Mencari bilangan terkecil atau terbesar relatif mudah, namun menentukan bilangan terkecil ketiga membutuhkan kemahiran yang lebih. Dalam postingan blog ini, kami akan membahas tiga metode untuk mengatasi masalah ini menggunakan Java: mengurutkan array, mengurutkan daftar, dan memanfaatkan aliran.

Metode 1: Menyortir Array

Array adalah salah satu struktur data mendasar di Java, menjadikannya titik awal alami untuk eksplorasi kita. Idenya di sini adalah mengurutkan array dalam urutan menaik dan kemudian mengambil elemen di indeks 2.

Metode 2: Menyortir Daftar

Daftar memberikan alternatif yang lebih fleksibel terhadap array, memungkinkan pengubahan ukuran dinamis dan manipulasi lebih mudah. Untuk menemukan angka terkecil ketiga dalam sebuah daftar, kita dapat mengikuti pendekatan serupa dengan pengurutan array.

Metode 3: Memanfaatkan Aliran

Aliran Java adalah cara ampuh untuk memproses rangkaian elemen. Kita dapat menggunakan aliran untuk mengurutkan elemen dan kemudian mengambil angka terkecil ketiga.

Memilih Metode yang Tepat

Setiap metode memiliki kelebihan dan kasus penggunaannya masing-masing. Jika Anda memiliki array, metode pengurutan array mungkin yang paling efisien. Daftar bersifat serbaguna dan menawarkan lebih banyak kemudahan, sementara aliran memberikan pendekatan fungsional dan dapat menangani kumpulan data yang lebih besar dengan mudah.

Berikut ini contoh lengkapnya:

CrunchyThirdSmallestNumberFinder.java

 paket crunchify.com.tutorial;

import java.util.Array;
impor java.util.List;
import java.util.stream.Collectors;
impor java.util.stream.Stream;

/**
 * @penulis Crunchify.com
 * Menemukan Angka Terkecil ke-3 di Java: Panduan Komprehensif
 *
 */

kelas publik CrunchyThirdSmallestNumberFinder {

    // Metode untuk menemukan angka terkecil ketiga dalam sebuah array
    public static int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.panjang < 3) {
            throw new IllegalArgumentException("Array harus berisi minimal 3 elemen crunch");
        }

        // Urutkan array crunchy dalam urutan menaik
        Array.sort(crunchArr);
        kembalikan crunchArr[2]; // Mengembalikan elemen renyah terkecil ketiga
    }

    // Metode untuk menemukan angka terkecil ketiga dalam sebuah daftar
    public static int findCrunchyThirdSmallest(Daftar<Bilangan Bulat> crunchList) {
        if (crunchList.ukuran() < 3) {
            throw new IllegalArgumentException("Daftar harus berisi minimal 3 elemen crunch");
        }

        // Urutkan daftar yang renyah menggunakan aliran dan kumpulkan elemen yang diurutkan ke dalam daftar baru
        Daftar<Bilangan Bulat> diurutkanCrunchList = crunchList.stream()
                .diurutkan()
                .collect(Collectors.toList());

        kembalikan diurutkanCrunchList.get(2); // Mengembalikan elemen renyah terkecil ketiga
    }

    // Metode untuk menemukan angka terkecil ketiga dalam suatu aliran
    public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // Kumpulkan elemen dari aliran renyah, urutkan, dan kumpulkan ke dalam daftar
        Daftar<Bilangan Bulat> diurutkanCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (diurutkanCrunchList.ukuran() < 3) {
            throw new IllegalArgumentException("Streaming harus mengandung setidaknya 3 elemen crunch");
        }

        kembalikan diurutkanCrunchList.get(2); // Mengembalikan elemen renyah terkecil ketiga
    }

    public static void main(String[] args) {
        int[] crunchArr = {35, 62, 28, 31, 13, 97};
        Daftar<Bilangan Bulat> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328);
        Aliran<Bilangan Bulat> crunchStream = Aliran.of(427, 53, 71, 99, 25, 62);

        // Temukan angka terkecil ketiga menggunakan sumber berbeda
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // Cetak angka terkecil ketiga yang renyah
        System.out.println("Renyah terkecil ketiga dari arr: " + crunchyThirdSmallestFromArr);
        System.out.println("Renyah terkecil ketiga dari daftar: " + crunchyThirdSmallestFromList);
        System.out.println("Renyah terkecil ketiga dari aliran: " + crunchyThirdSmallestFromStream);
    }
}

Hasil Konsol Eclipse:

Jalankan saja program di atas di Eclipse IDE atau IntelliJ IDEA dan Anda akan mendapatkan hasil seperti di bawah ini.

 Renyah terkecil ketiga dari arr: 31
Renyah terkecil ketiga dari daftar: 14
Renyah terkecil ketiga dari aliran: 62

Proses selesai dengan kode keluar 0

Ada beberapa perbedaan kinerja yang perlu dipertimbangkan:

Dari segi kompleksitas waktu, ketiga metode tersebut memiliki langkah pengurutan yang serupa, yang umumnya memiliki kompleksitas waktu O(n log n) , dengan 'n' adalah jumlah elemen dalam koleksi (array, daftar, atau aliran).

Kompleksitas waktu untuk mengakses elemen terkecil ketiga adalah konstan, O(1) , karena ini adalah pencarian array atau daftar sederhana.

  1. Metode Array: Metode ini mengurutkan array pada tempatnya, sehingga tidak memerlukan memori tambahan untuk koleksi yang baru diurutkan. Hal ini dapat menyebabkan penggunaan memori sedikit lebih baik dibandingkan dengan metode daftar dan aliran.
  2. Metode Daftar: Metode ini mengubah daftar menjadi daftar yang diurutkan menggunakan aliran. Meskipun mudah, ini melibatkan pembuatan daftar baru, yang menghabiskan memori tambahan. Hal ini dapat menjadi kekhawatiran jika penggunaan memori sangat penting.
  3. Metode Aliran: Metode aliran cukup fleksibel dan fungsional, namun melibatkan pengumpulan aliran ke dalam daftar. Hal ini menambah sedikit overhead dalam hal memori dan pemrosesan dibandingkan dengan mengurutkan array secara langsung.

Beri tahu saya jika Anda menghadapi masalah saat menjalankan kode ini.