😎풀이

  1. deque 정의(숫자의 인덱스가 정의됨)
  2. nums 순회
    2-1. 윈도우를 벗어난 요소 제거
    2-2. 추가된 값 중 현재값보다 작은 수는 최댓값이 될 수 없으므로 제거
    2-3. 현재 요소 추가
    2-4. 현 최댓값(deque[0] 인덱스를 갖는 수) 결괏값에 추가
  3. 결괏값 반환
function maxSlidingWindow(nums: number[], k: number): number[] {
    const result = []
    const deque = []
    for(let i = 0; i < nums.length; i++) {
        // 윈도우를 벗어난 요소 deque에서 제거
        while(deque.length && deque[0] < i - k + 1) deque.shift()
        // 현재 요소보다 작은 요소는 최댓값이 될 수 없음
        while(deque.length && nums[deque.at(-1)] < nums[i]) deque.pop()
        // 현재 요소를 추가
        deque.push(i)
        // 현 최댓값을 결괏값에 반영
        if(i >= k - 1) result.push(nums[deque[0]])
    }

    return result
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글