티스토리 뷰
https://leetcode.com/problems/search-in-rotated-sorted-array/
input값은 정렬된 배열이기 때문에 바이너리 서치를 사용할 수 있다.
배열이 시작하는 시점 (정렬이 끝나는 시점)을 찾아서 범위마다 바이너리 서치를 실행해서 풀었다.
nums[] = {5 < 6 < 7 > 1 < 2 < 3 < 4}
binarySearch(5~7) / binarySearch(1~4)
[leetcode][C++] search in rotated sorted array
class Solution {
public:
int binarySearch(int left, int right, vector<int>& nums, int target) {
int mid;
while (left <= right) {
mid = (left + right) / 2;
// mid = left + (right - left) / 2; avoid overflow
if (nums[mid] == target)
return mid;
else if (nums[mid] > target)
right = mid - 1;
else left = mid + 1;
}
return -1;
}
int search(vector<int>& nums, int target) {
int i = 0;
for (; i < nums.size() - 1; i++) {
if (nums[i] > nums[i + 1])
break;
}
if (nums[0] <= target && target <= nums[i])
return binarySearch(0, i, nums, target);
else
return binarySearch(i + 1, nums.size() - 1, nums, target);
}
};
'Problem Solving' 카테고리의 다른 글
[leetcode][C++] sort colors (0) | 2021.10.15 |
---|---|
[leetcode][C++][Java] jump game (0) | 2021.10.15 |
[leetcode][C++] generate parentheses (0) | 2021.10.05 |
[leetcode][C++][Java] letter combinations of a phone number (0) | 2021.10.05 |
[프로그래머스][C++] 모음사전 (0) | 2021.10.04 |
댓글