cari

Rumah  >  Soal Jawab  >  teks badan

javascript - js, soalan yang tiba-tiba terlintas di fikiran saya semasa saya memberus leetcode

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

欧阳克欧阳克2724 hari yang lalu594

membalas semua(3)saya akan balas

  • 阿神

    阿神2017-06-12 09:30:19

    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.

    balas
    0
  • 怪我咯

    怪我咯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;
    };

    balas
    0
  • 高洛峰

    高洛峰2017-06-12 09:30:19

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

    balas
    0
  • Batalbalas