static int twoPointer() {
int s = 0, e = 0, len = 0;
int max = Integer.MIN_VALUE;
Map<Integer, Integer> map = new HashMap<>();
while (e < n) {
map.put(arr[e], map.getOrDefault(arr[e], 0) + 1);
// 현재 arr[e] 숫자의 개수가 k를 초과했을 때
// Map의 모든 값이 k 이하가 될 때 까지 s를 이동시키며 윈도우 축소
while (map.get(arr[e]) > k) {
map.put(arr[s], map.get(arr[s]) - 1);
s++;
}
max = Math.max(max, e - s + 1);
e++;
}
return max;
}

// 문제: N개의 정수로 이루어진 수열에서 두 수를 골랐을 때 그 차이가 M 이상이면서 제일 작은 경우를 구하는 문제
int s = 0;
int e = 0;
int min = Integer.MAX_VALUE;
while (e < n) {
int diff = a[e] - a[s];
if (diff >= m) {
min = Math.min(min, diff);
s++;
} else {
e++;
}
}
// 문제: 정렬된 배열에서 특정 값 x를 찾는 문제
int binarySearch(int[] arr, int x) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x) {
return mid;
} else if (arr[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 값이 없는 경우
}
투 포인터는 배열의 두 요소 간의 관계를 탐색할 때 사용하며,
이분 탐색은 배열 내의 특정 값을 빠르게 찾을 때 사용