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