flow-vector

Sliding Window

  • 유형
    • subarray를 유효하게 만드는 조건이 주어 진다. 합해서 몇 이하, 어떤 숫자의 포함 빈도 등
    • 여러 subarray안에서 최적의 subarray 를 찾는 문제가 나옴 혹은 몇개의 subarray가 나오는지?
  • 예시
    • 합이 k보다 작거나 같은 가장 긴 하위 배열을 구합니다.
    • "0"이 하나 이상 있는 가장 긴 부분 문자열을 구합니다.
    • k보다 작은 곱을 갖는 서브 배열의 개수 찾기
  • 수도 코드
function fn(arr):
    left = 0
    for (int right = 0; right < arr.length; right++):
        Do some logic to "add" element at arr[right] to window

        while WINDOW_IS_INVALID:
            Do some logic to "remove" element at arr[left] from window
            left++

        Do some logic to update the answer
  • 효율적인 이유
    • 배열에서 전체 subarray를 구하는 것은 O(n^2)→ partial sum
    • sliding window를 사용하면 O(n)에 구할 수 있음

'Computer Science > DSA' 카테고리의 다른 글

알고리즘 - Prefix Sum  (0) 2023.06.20
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!