λ¬Έμ νμ
μ£Όλ³ μμλ€λ³΄λ€ ν° μμλ₯Ό peak element
λΌκ³ νλ€.
κ·Έλ¬ν μμκ° μ¬λ¬κ°λΌλ©΄ μ무 μμμ μΈλ±μ€λ₯Ό λ°ννλ©΄ λλ€.
μκ° λ³΅μ‘λκ° O(logN) μ΄ λλλ‘ κ΅¬νν΄μΌνλ€.
νμ΄
1οΈβ£ μ΄λΆ νμμ μ΄μ©ν νμ΄
π‘ λ μ€λ₯Έ Idea
μκ°λ³΅μ‘λλ₯Ό ν΅ν΄ μ΄λΆ νμμ μ΄μ©ν΄μΌν¨μ μ μ μμλ€.
λ³΄ν΅ μ΄λΆνμμ μ λ ¬λ λ°°μ΄μμλ§ μ¬μ©ν΄μμ,
μ΄λΆ νμμ μ΄λ»κ² νμ©ν μ μμμ§ μ€λ«λμ μκ°ν΄λ³΄μλ€.mid
ν¬μΈνΈ κ°μ΄mid + 1
ν¬μΈνΈ κ°λ³΄λ€ μλ€λ©΄?mid
ν¬μΈνΈ κ°μpeak element
κ° λ νλ₯ μ΄ μ‘΄μ¬νμ§ μλλ€.
λ°λΌμ νμ λ²μλ₯Όmid+1
μ΄μμΌλ‘ μ‘μμ€μΌ ν κ²μ΄λ€.
λ§μ½,mid
ν¬μΈνΈ κ°μ΄mid + 1
ν¬μΈνΈ κ° λ³΄λ€ ν¬λ€λ©΄mid
ν¬μΈνΈ κ°μpeak element
κ° λ νλ₯ μ΄ μ‘΄μ¬νλ€.
λ°λΌμ, νμ λ²μλ₯Όmid
μ΄νλ‘ μ‘μμ€μΌ νλ€.
μ μμ΄λμ΄λ₯Ό λ°νμΌλ‘ μ½λλ₯Ό ꡬννμλ€.
class Solution {
public int findPeakElement(int[] nums) {
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = (left+right) / 2;
if(nums[mid]<nums[mid+1]){
left = mid+1;
}else{
right = mid;
}
}
return left;
}
}
κ²°κ³Ό
π νκ³
μκ° λ³΅μ‘λλ₯Ό λͺ μν΄μ€μ, μ΄λΆνμ λ°©μμ λ μ¬λ Έκ³ κ·Έμ λ§κ² λ‘μ§μ μκ°νλ ꡬνν μ μμλ€.
λ‘μ§μ΄ μ§κ΄μ μΌλ‘λ μ΄ν΄κ° κ°λλ°, μνμ μΌλ‘λ μ΄λ»κ² μ¦λͺ ν΄μΌν μ§ μ½κ² λ μ€λ₯΄μ§ μμμ μ‘°κΈ μ°μ°νκΈ΄νλ€.
μ€κ° μ§μ μ κΈ°μ€μΌλ‘ μ€λ₯Έμͺ½ μμκ° λ ν¬λ©΄ μ€λ₯Έμͺ½ μμμΌλ‘ μ΄λνλλ°
μ€λ₯Έμͺ½ μμμ, μ΅μ§λ‘ peak λ₯Ό λ§λ€μ§ μκΈ° μν΄μ κ³μ ν° μμλ§ μ£Όμ΄μ§λ€κ³ κ°μ νμ λ, κ²°κ΅ λ°°μ΄μ λ κ°λ peak ν¬μΈνΈλ‘ μΈμ λκΈ° λλ¬Έμ μ‘΄μ¬ν¨μ μ μ μκ³
κ·Έλ λ€κ³ κ³μ ν° μμλ§ μ£Όμ΄μ§μ§ μκ³ , μμ μμκ° λνλλ μκ° peak ν¬μΈνΈκ° μκΈ°κΈ° λλ¬Έμ μ‘΄μ¬νλ€κ³ μκ°ν μ μκ² λ€.