Pelajaran 3.4
Temukan kerja yang diulang
7 menit · 7 langkah
Langkah 1 dari 7 · Penjelasan
Soal: "Return array di mana
out[i]adalah jumlahnums[0]sampainums[i]."Brute force-nya menjumlahkan ulang dari awal untuk setiap
i, dengan loop dalamjdari 0 sampaii. Untuk[3, 1, 4, 2],out[2]menghitung 3 + 1 + 4 dari nol, padahal 3 + 1 sudah dihitung untukout[1]. Setiap putaran mengulang penjumlahan yang sudah dilakukan putaran sebelumnya.Langkah 2 dari 7 · Tebak hasilnya
Berapa kali penjumlahan terjadi untuk 4 item?
function solution(nums) { let adds = 0 for (let i = 0; i < nums.length; i++) { for (let j = 0; j <= i; j++) { adds++ } } return adds}10416
Langkah 3 dari 7 · Pilih pendekatan
Brute force untuk running sum: loop luar
ijalan di setiap item. Di dalamnya,summulai dari 0, loopjmenjumlahkannums[0]sampainums[i], laluout.push(sum).
Kerja apa yang diulang-ulang?- Menjumlahkan ulang
nums[0]sampainums[i - 1], padahal hasilnya sudah ada di putaran sebelumnya out.push(sum)di setiap putaran- Loop luar
i - Membaca
nums.length
- Menjumlahkan ulang
Langkah 4 dari 7 · Susun kodenya
Susun versi O(n) untuk running sum, di mana
out[i]adalah jumlahnums[0]sampainums[i]. Simpan jumlah sejauh ini. Dua baris tidak termasuk.return outsum += nums[i]out.push(sum)}const out = []}for (let i = 0; i < nums.length; i++) {let sum = 0function solution(nums) {sum = nums[i]for (let i = 1; i < nums.length; i++) {Langkah 5 dari 7 · Pilih pendekatan
Brute force lain: "Untuk setiap
i, cek dengan loop dalam apakahnums[i]sudah muncul sebelumnya." Itu O(n²).
Apa yang bisa menjawab "sudah pernah lihat?" dalam satu langkah?- Set atau Map yang menyimpan setiap angka yang sudah lewat
- Sort ulang array di setiap putaran
- Loop dalam dengan
j = i + 1 - Satu variable yang menyimpan angka sebelumnya
Langkah 6 dari 7 · Tebak hasilnya
Apa yang di-return untuk
[5, 3, 5, 3]?function solution(nums) { const seen = new Map() for (let i = 0; i < nums.length; i++) { if (seen.has(nums[i])) { return [seen.get(nums[i]), i] } seen.set(nums[i], i) } return []}[0, 2][1, 3][2, 0][]
Langkah 7 dari 7 · Ringkasan
- Setelah brute force jalan, cari loop dalam yang menghitung ulang sesuatu.
- Simpan hasil sejauh ini, seperti running total, supaya tidak dihitung ulang.
- "Sudah pernah lihat?" bisa dijawab dalam satu langkah dengan Set atau Map.