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
Patricia Arquetteasal
2024-12-22 03:41:15552semak imbas

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);
}

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;

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!

Kenyataan:
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