javascript - js, soalan yang tiba-tiba terlintas di fikiran saya semasa saya memberus leetcode
欧阳克
欧阳克 2017-06-12 09:28:19
0
3
591

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. ! ! !

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

membalas semua(3)
阿神

Idea untuk membuang pendua in situ adalah sangat mudah

  1. Buat objek cincang dengan setiap elemen tatasusunan sebagai kunci

  2. Setiap elemen dinilai oleh cincang sama ada ia sudah wujud dalam tatasusunan

  3. Jika wujud, padamkan elemen

  4. 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.

刘奇

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;
};
小葫芦

const removeDuplicates=arr=>Array.from(Set baharu(arr))

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan