public class SlidingWindow {
// 슬라이딩 윈도우 예시: 최대 부분 배열의 합 (길이가 k인)
public static int maxSubArraySum(int[] arr, int k) {
int n = arr.length;
if (n < k) {
return -1; // 에러 처리
}
int window_sum = 0;
for (int i = 0; i < k; i++) {
window_sum += arr[i];
}
int max_sum = window_sum;
for (int i = k; i < n; i++) {
window_sum += arr[i] - arr[i - k];
max_sum = Math.max(max_sum, window_sum);
}
return max_sum;
}
// 투 포인터 예시: 배열에서 두 수의 합이 특정 값과 같은 쌍 찾기
public static boolean findSumPairs(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == target) {
return true;
} else if (sum < target) {
left++;
} else {
right--;
}
}
return false;
}
public static void main(String[] args) {
int[] arr = {1, 4, 2, 10, 2, 3, 1, 0, 20};
int k = 4;
System.out.println("Maximum sum of subarray of size " + k + ": " + maxSubArraySum(arr, k)); // 출력: 24
int[] arr2 = {2, 7, 11, 15};
int target = 9;
System.out.println("Found pair with sum " + target + ": " + findSumPairs(arr2, target)); // 출력: true
}
}