1. Sliding Window
- 선형 자료구조에서 특정 크기의 연속된 구간을 찾는 알고리즘 입니다.
- 일정한 크기의 구간을 움직여 찾습니다.
동작 원리
- 윈도우 설정: 초기 윈도우 구간을 설정함
- 윈도우 이동: 한 번에 한 요소씩 이동시킴 (왼쪽 끝 제거 + 오른쪽으로 이동)
- 조건 확인: 각 윈도우가 특정 조건을 만족하는지 확인
최대 구간 합) 고정 크기
더보기
public int maxSumK(int k) {
int sum = 0;
for (int i = 0; i < k; i++) sum+=arr[i];
int ans = sum;
for (int j = k; j < arr.length; j++) {
sum += arr[j];
sum -= arr[j-k];
ans = Math.max(ans, sum);
}
return ans;
}
최대 구간 합) 가변 크기 + 부분 합 제한
더보기
public int longestLenSumLt(int S) {
int n = arr.length;
int l = 0, sum = 0, ans = 0;
for (int r = 0; r < n; r++) {
sum += arr[r];
while (sum > S && l <= r) sum -= arr[l++];
ans = Math.max(ans, r-l+1);
}
return ans;
}
장점
- 성능 (O(n))
- in-place
2. 문제
subarray
'Algorithm' 카테고리의 다른 글
| [고급 알고리즘] Graph(Shortest Path): Floyd-Warshall (0) | 2024.09.20 |
|---|---|
| [고급 알고리즘] Greedy: Activity Selection Problem (0) | 2024.09.20 |
| [고급 알고리즘] Dynamic Programming: Travelling salesman problem (0) | 2024.03.01 |
| [고급 알고리즘] Dynamic Programming: String (0) | 2024.03.01 |
| [고급 알고리즘] Dynamic Programming: Knapsack Problem (1) | 2024.03.01 |