Masalah Dua Jumlah ialah masalah algoritma klasik. Ia meminta anda mencari dua nombor dalam tatasusunan yang menjumlahkan sehingga *sasaran * tertentu yang disediakan dan kemudian mengembalikan indeksnya daripada tatasusunan yang diberikan.
Memandangkan tatasusunan nombor integer dan sasaran integer, kembalikan indeks bagi kedua-dua nombor supaya ia ditambah kepada sasaran. Setiap input akan mempunyai satu penyelesaian dan anda tidak boleh menggunakan elemen yang sama dua kali.
Input: angka = [2, 7, 11, 15], sasaran = 9
Output: [0, 1]
Penjelasan: nombor[0] nombor[1] = 2 7 = 9
Pendekatan pertama untuk sebarang masalah hanyalah dengan menyelesaikan sesuatu dan perkara yang paling mudah dari segi konsep.
Lelar melalui tatasusunan dengan dua gelung dan semak semua pasangan nombor.
const twoSum = (nums, target) => { for(let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { console.log(` i is ${nums[i]} and k is ${nums[j]}`) // lets check if we add the 2 numbers if it equals target if (target === nums[i] + nums[j]) { return [i, j] } } } }; const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSum(nums, target));
Kerumitan Masa ialah O(n²)
Kerumitan Angkasa ialah O(1)
1.Kami tidak mencipta struktur data baharu
Kami akan menggunakan peta cincang untuk menyelesaikan perkara ini. Mari kita terangkan sedikit algoritma ini
Jadi penyelesaian pertama boleh menggunakan objek JS biasa dan membina HashMap kami dengan cara itu
const twoSumOptimizedRegularObject = (nums, target) => { const objectStuff = {} // write a for loop, to go through the arr for (let i = 0; i < nums.length; i++) { const complement = target - nums[i] if (complement in objectStuff) { return [objectStuff[complement],i] } objectStuff[nums[i]] = i } } const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSumOptimizedRegularObject(nums, target));
Penyelesaian kedua sebenarnya menggunakan Struktur Data Peta dalam JS. Ini membolehkan pelaksanaan yang lebih ketat dan lebih mantap, menggunakan objek Peta (diperkenalkan dalam ES6) dan selalunya diutamakan. Peta menyediakan gelagat peta cincang yang eksplisit dan mengelakkan beberapa keanehan objek JavaScript, seperti mewarisi sifat daripada Object.prototype.
const twoSumOptimized = (nums, target) => { const mapOfStuff = new Map() // write a for loop, to go through the arr for (let i = 0; i < nums.length; i++) { let complement = target - nums[i] if (mapOfStuff.has(complement)) { return [mapOfStuff.get(complement), i] } mapOfStuff.set(nums[i], i) } } const nums = [2, 7, 11, 15]; const target = 9; console.log(twoSumOptimized(nums, target));
Kerumitan Masa ialah O(n)
Kerumitan Angkasa ialah O(n)
Dalam kes yang paling teruk, kami mungkin menyimpan hampir semua nombor
Tukar ganti antara masa dan kecekapan ingatan
Atas ialah kandungan terperinci Masalah Dua Jumlah dalam Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!