Rumah > Soal Jawab > teks badan
Soalan yang saya lakukan ialah tentang mengalih keluar pendua daripada tatasusunan
Batang soalan https://leetcode.com/problems...
Saya menerimanya semasa saya melakukannya, tetapi saya tiba-tiba terfikir satu soalan, bagaimana saya boleh lakukannya tanpa membuka tatasusunan baharu? Dalam kes tatasusunan, lengkapkan penduaan tatasusunan asal dan kembalikan tatasusunan yang diubah suai? ?
Berikut ialah kod yang saya luluskan
var removeDuplicates = function(nums) {
if(nums === null || nums.length === 0) return 0;
if(nums.length == 1) return 1;
var count = 0;
for(var i = 1 ; i < nums.length ; i++){
if(nums[count] != nums[i]){
count++;
nums[count] = nums[i];
}
}
return ++count;
};
Pada mulanya, saya terfikir untuk mengembalikan num.length pada akhirnya, tetapi setelah memikirkannya dengan teliti, saya menyedari bahawa ini bukan gurauan Nombor asal yang tidak diubah suai mesti dikembalikan selepas menulisnya dengan cara ini, jadi saya mula berfikir tentang cara mengembalikan nombor yang diubah suai ini, tetapi selepas membaca banyak artikel tentang penyingkiran duplikasi tatasusunan, saya masih belum menemui jawapannya. ! ! !
阿神2017-06-12 09:30:19
Idea untuk membuang pendua in situ adalah sangat mudah
Buat objek cincang dengan setiap elemen tatasusunan sebagai kunci
Setiap elemen dinilai oleh cincang sama ada ia sudah wujud dalam tatasusunan
Jika wujud, padamkan elemen
Selepas traversal selesai, gerakkan elemen tatasusunan untuk mengisi jurang
Memandangkan elemen tatasusunan bergerak ialah operasi berkos tinggi (contohnya, tatasusunan N-panjang digali sama rata dengan N/2 kosong, maka kerumitan masa elemen bergerak dari belakang ke hadapan boleh mencapai tahap N^2) , dan algoritma ini Ia tidak menepati arah aliran tidak berubah semasa, jadi pendekatan ini tidak berterima kasih dan tidak perlu melakukannya dalam senario umum.
怪我咯2017-06-12 09:30:19
Soalan ini bukan deduplikasi mudah tatasusunan ini diisih, yang berbeza daripada penyahduplikasi tatasusunan yang tidak tertib.
Dalam penyahduplikasi tatasusunan tertib, elemen yang sama akan diedarkan bersama, jadi anda hanya perlu menentukan sama ada elemen seterusnya adalah sama dengan elemen sebelumnya semasa proses traversal untuk melakukan penyahduplikasian.
Soalan ini ialah AC saya pada masa itu
var removeDuplicates = function(nums) {
var j = 0;
var i = 0;
for (; i < nums.length; i++) {
if (nums[j] !== nums[i]) {
nums[++j] = nums[i];
}
}
return j+1;
};