π‘ λ¬Έμ
π― νμ΄ κ³Όμ
λ°°μ΄ num
μμ i
λ²μ§Έ μμλ§ μ μΈν λλ¨Έμ§ μμλ€μ κ³±μ i
λ²μ§Έ μΈλ±μ€μ ν λΉν κ²°κ³Όλ₯Ό λ°νν΄μΌν©λλ€.
μ΄λ O(n)
μ μκ°λ³΅μ‘λλ‘ μνλμ΄μΌνκ³ , λλκΈ° μ°μ°μ μ¬μ©νλ©΄ μλλ μ μ½μ‘°κ±΄μ΄ μμ΅λλ€.
μ΄λ₯Ό μν΄μ i
λ²μ§Έ μμλ₯Ό μ μΈν λλ¨Έμ§ μμλ€μ κ³±μ λ€μκ³Ό κ°μ΄ λλ μ μκ°ν μ μμ΅λλ€.
answer[i] = num[0...i-1] * num[i+1...]
λΆλΆν©
μκ³ λ¦¬μ¦μ μ°¨μ©νλ©΄, μμμ νμν ꡬκ°κ³±μ 미리 κ³μ°ν΄λμ μ μμ΅λλ€.
ν λ°°μ΄μλ μΌμͺ½μμλΆν° λμ ν κ³±μ μ μ₯νκ³ , λ€λ₯Έ λ°°μ΄μλ μ€λ₯Έμͺ½μμλΆν° λμ ν κ³±μ μ μ₯ν©λλ€.
κ·Έλ¬λ©΄ μ μμ λ€μκ³Ό κ°μ΄ λ°κΏμ κ³μ°ν μ μμ΅λλ€.
answer[i] = prefixLeft[i-1] * prefixRight[i+1]
π¨π» μ½λ
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
const leftPrefix = Array(nums.length).fill(0)
leftPrefix[0] = nums[0]
for (let idx = 1; idx < nums.length; idx += 1) {
leftPrefix[idx] = leftPrefix[idx-1] * nums[idx]
}
const rightPrefix = Array(nums.length).fill(0)
rightPrefix[nums.length-1] = nums[nums.length-1]
for (let idx = nums.length-2; idx >= 0; idx -= 1) {
rightPrefix[idx] = rightPrefix[idx+1] * nums[idx]
}
const answer = Array(nums.length).fill(0)
for (let idx = 0; idx < nums.length; idx += 1) {
answer[idx] = (leftPrefix[idx-1] ?? 1) * (rightPrefix[idx+1] ?? 1)
}
return answer
};
λ°μν
'π algorithm > leetcode' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
LeetCode 438 - Find All Anagrams in a String (Medium) (0) | 2023.05.14 |
---|---|
LeetCode 42 - Trapping Rain Water (Hard) (0) | 2023.04.30 |
LeetCode 2390 - Removing Stars From a String (Medium) (0) | 2023.04.24 |
LeetCode 1603 - Design Parking System (Easy) (0) | 2023.04.24 |
LeetCode 15 - 3Sum (Medium) (0) | 2023.04.24 |
π¬ λκΈ