정렬된 배열에서 target이 위치하는 첫번째 위치와 마지막 위치를 구하는 문제이다.
정렬이 되어있으므로 이분 탐색을 사용할 수 있다. 일반적인 이분탐색으로 찾되, 타겟보다 크거나 같은 부분에서 일치하는 것을 찾게 되면 시작점이 되고, 타겟보다 작거나 같은 부분에서 일치하는 부분을 찾게되면 마지막점이 된다.
class Solution {
public int[] searchRange(int[] nums, int target) {
int n = nums.length;
int l = 0;
int r = n - 1;
int[] answer = { -1, -1 };
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] < target) {
l = mid + 1;
} else {
if (nums[mid] == target) {
answer[0] = mid;
}
r = mid - 1;
}
}
l = 0;
r = n - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] > target) {
r = mid - 1;
} else {
if (nums[mid] == target) {
answer[1] = mid;
}
l = mid + 1;
}
}
return answer;
}
}
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] LeetCode 46번 permutation (0) | 2021.10.11 |
---|---|
[Java] LeetCode 39번 Combination Sum (0) | 2021.10.04 |
[Java] LeetCode 33번 Search in Rotated Sorted Array (0) | 2021.10.02 |
[Java] LeetCode 25번 Reverse Nodes in k-Group (0) | 2021.09.30 |
[Java] LeetCode 23번 Merge k Sorted Lists (0) | 2021.09.29 |