javascript - Sila terangkan kod algoritma berikut
習慣沉默
習慣沉默 2017-07-05 10:41:45
0
1
950

Ini ialah kod tentang algoritma ini, dilaksanakan dalam javascript, tetapi saya tidak faham algoritma di bawah. Minta Allah jelaskan.

var twoSum = function(nums, target) {
    var ret = [];
    var exist = {};
    for(var i = 0; i < nums.length; i++){
        if(typeof(exist[target - nums[i]]) !== 'undefined'){
            ret.push(exist[target - nums[i]]);
            ret.push(i + 1);
        }
        
        exist[nums[i]] = i + 1;
    }
    
    return ret
};
習慣沉默
習慣沉默

membalas semua(1)
淡淡烟草味

Penyoal boleh cuba menggunakan contoh untuk membaca kod. Ini pendapat saya:

Sebagai contoh, cuma klik pada contoh dalam tangkapan skrin:

Gelung for terutamanya merentasi tatasusunan parameter pertama, dan kemudian ia melakukan dua langkah utama:

Mari kita lihat yang selepas jika dahulu exist[nums[i]] = i + 1; Ayat ini akan dilaksanakan dalam setiap gelung wujud di sini sebagai contoh, nombor pertama yang dilalui ialah 2 (i=0), jadi wujud disimpan: {2: 1} Pasangan nilai kunci sedemikian, jadi selepas satu gelung, wujud akan menjadi:
array Seterusnya, "nilai elemen": kamus pasangan nilai kunci "indeks tatasusunan + 1".

Seterusnya, mari kita lihat penghakiman dalam if Sudah tentu, apabila i=0 dalam gelung for, exist belum lagi menyuntik pasangan nilai kunci, dan ungkapan if adalah palsu

Tetapi apabila i=1, wujud[sasaran-bilangan[1]] bermakna wujud[9-7] = wujud[2]. ? Jadi, simpan nilai pasangan nilai kunci yang sepadan (sebenarnya indeks nilai asal + 1 dalam tatasusunan asal) untuk ret, dan kemudian simpan i+1 semasa untuk ret... Akhirnya, selepas gelung selesai , kembali ke ret , jadi kami mendapat [1,2] ps: Jawapan kepada contoh yang diberikan oleh penyoal adalah tidak konsisten dengan kod.

Ringkasan: Teras algoritma ini adalah menggunakan objek wujud untuk menyimpan elemen tatasusunan yang telah dilalui, dan menggunakan target-nums[i] untuk secara tidak langsung menggunakan wujud untuk mencari sama ada terdapat elemen yang memenuhi syarat antara elemen yang telah dilalui dalam tatasusunan.

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