Rumah > Java > javaTutorial > Bagaimanakah Kami Boleh Mengoptimumkan Algoritma Penyingkiran Duplikat untuk Tatasusunan Besar Tanpa Menggunakan Fungsi Set Terbina dalam?

Bagaimanakah Kami Boleh Mengoptimumkan Algoritma Penyingkiran Duplikat untuk Tatasusunan Besar Tanpa Menggunakan Fungsi Set Terbina dalam?

Patricia Arquette
Lepaskan: 2024-12-22 03:41:15
asal
475 orang telah melayarinya

How Can We Optimize a Duplicate Removal Algorithm for Large Arrays Without Using Built-in Set Functions?

Mengoptimumkan Algoritma Penyingkiran Duplikat daripada Tatasusunan

Kod yang disediakan bertujuan untuk mengalih keluar nilai pendua daripada tatasusunan tanpa menggunakan alatan terbina dalam seperti Set atau iterator. Walau bagaimanapun, ia menghadapi kesesakan prestasi apabila berurusan dengan sejumlah besar elemen. Isu ini berpunca daripada struktur gelung bersarang, di mana setiap elemen dibandingkan dengan semua elemen berikutnya.

Untuk meningkatkan kecekapan algoritma, pertimbangkan strategi pengoptimuman berikut:

Menggunakan HashSet:

Walaupun tugas itu secara jelas melarang penggunaan Set atau HashSet, ia berbaloi menyatakan bahawa HashSet menyediakan penyelesaian yang cekap untuk menghapuskan pendua. Pelaksanaannya menggunakan jadual cincang untuk menjejaki kewujudan setiap elemen, membolehkan carian dan pemasukan masa berterusan.

Set<Integer> uniqueValues = new HashSet<>();

for (int num : arr) {
    uniqueValues.add(num);
}
Salin selepas log masuk

Set Nilai unik yang terhasil akan mengandungi hanya elemen yang berbeza.

Memelihara Susunan Elemen:

Jika mengekalkan susunan asal unsur adalah penting, pengubahsuaian versi algoritma yang disediakan boleh digunakan:

// Create a boolean array to track duplicates
boolean[] duplicates = new boolean[arr.length];

// Find and mark duplicates in the first iteration
for (int i = 0; i < arr.length; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
            duplicates[j] = true;
        }
    }
}

// Create a new array to store unique values
int[] uniqueArr = new int[arr.length - duplicates.length];
int uniqueIndex = 0;

// Copy unique values into the new array
for (int i = 0; i < arr.length; i++) {
    if (!duplicates[i]) {
        uniqueArr[uniqueIndex++] = arr[i];
    }
}

return uniqueArr;
Salin selepas log masuk

Algoritma ini mencapai kerumitan masa O(n²) sambil mengekalkan susunan unsur asal.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Algoritma Penyingkiran Duplikat untuk Tatasusunan Besar Tanpa Menggunakan Fungsi Set Terbina dalam?. 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