https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/
문제에서 제시한 시간복잡도는 O(log n)이다.
정렬된 배열이 n바퀴 돌았다고 가정하는 것이니.. 이분탐색을 해서 찾으라는 건가?
정렬된 배열이 아니라 n바퀴 돈 배열이니 한 번 비튼 문제인 듯 하다.
mid를 찍고 나서 낮은 쪽 높은 쪽을 어떻게 알 수 있을까?
내 왼쪽이나 오른쪽 값을 보고 정렬되었는지 판단하여 mid값을 옮길 수 있지 않을까?
음.. 배열이 회전된 것에 몰두해서 뻘짓하다 시간을 너무 썼고 Solution 참고했다.
결론적으로 정렬된 배열이 회전했다고 해서 이분탐색 가능한 특성 자체를 잃어버리지는 않는다.
어차피 mid, start ,end 찍으면 최소값으로 향해갈 수 있기 때문에..
class Solution {
public int findMin(int[] nums) {
int start = 0;
int end = nums.length - 1;
while (start < end) {
int mid = start + (end - start) / 2;
// if - mid가 end보다 크지 않다는 것은 앞쪽에 최소값이 있다는 것
// else - mid가 end보다 크다는 것은 뒤쪽에 최소값이 있다는 것
if (nums[mid] < nums[end]) {
end = mid;
} else {
start = mid + 1;
}
}
return nums[start];
}
}