Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap daripada Tatasusunan Tanpa Menggunakan Set?

Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap daripada Tatasusunan Tanpa Menggunakan Set?

Barbara Streisand
Lepaskan: 2024-12-09 13:32:16
asal
909 orang telah melayarinya

How Can I Efficiently Remove Duplicates from an Array Without Using Sets?

Penyingkiran Penduaan Tatasusunan yang Cekap Tanpa Set

Dalam beberapa cabaran pengaturcaraan, anda mungkin perlu mengalih keluar nilai pendua daripada tatasusunan tanpa menggunakan pra-bina struktur data seperti Set atau HashSet. Berikut ialah pendekatan yang dioptimumkan yang boleh anda pertimbangkan:

Pelaksanaan anda yang disediakan melakukan berbilang hantaran ke atas tatasusunan, yang membawa kepada kerumitan masa yang tidak cekap. Untuk memperbaikinya, pertimbangkan untuk menggunakan gabungan dua pengoptimuman:

1. Gunakan Tatasusunan Penanda:

Buat tatasusunan penanda bersaiz sama dengan elemen maksimum dalam tatasusunan asal. Mulakan semua elemen kepada 0. Apabila anda menemui elemen dalam tatasusunan asal, tetapkan kedudukan yang sepadan dalam tatasusunan penanda kepada 1. Dengan cara ini, anda hanya perlu menyemak tatasusunan penanda untuk menentukan sama ada elemen itu adalah pendua atau tidak.

2. Gunakan Penunjuk Indeks Akhir:

Kekalkan penunjuk indeks akhir yang menunjukkan indeks yang mana tatasusunan tanpa pendua telah dikira. Apabila anda menemui pendua, alihkan elemen selepas pendua ke kiri, kurangkan indeks akhir dengan sewajarnya.

Berikut ialah versi kod anda yang dioptimumkan menggunakan pengoptimuman ini:

public static int[] removeDuplicates(int[] arr) {
    // Initialize the marker array with zeros
    int[] marker = new int[1000000];
    int end = arr.length;

    for (int i = 0; i < end; i++) {
        // Check if the element is already marked as duplicate
        if (marker[arr[i]] == 1) {
            // If it's a duplicate, shift the elements after it to the left
            for (int j = i + 1; j < end; j++, i++) {
                arr[i] = arr[j];
            }
            end--;
            i--;
        } else {
            // If it's not a duplicate, mark it in the marker array
            marker[arr[i]] = 1;
        }
    }

    return arr;
}
Salin selepas log masuk

Pelaksanaan ini meningkatkan prestasi dengan ketara dengan mengelakkan hantaran berbilang ke atas tatasusunan dan mengurangkan bilangan pertukaran elemen yang diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Pendua dengan Cekap daripada Tatasusunan Tanpa Menggunakan Set?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan