https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/
1. 의사코드
우리는 보물인 0을 찾는것이다.
[4 5 6 7 0 1 2]
st m en
mid>en이면, 보물이 우측에 있는것이다. -> st=mid+1
[0 1 2]에서
mid 0 <en 2이면, 보물이 좌측에 있는것이다. -> en=mid; //mid-1아님
[0 1]에서
mid=0 < en=1 -> 보물이 좌측 -> en=0;
en과 st가 0으로 수렴했고, 그곳이 보물이다!
2. 전체코드
class Solution {
public:
int findMin(vector<int>& nums) {
int st=0,en=nums.size()-1;
while(st<en){
int mid=(st+en)/2;
if(nums[mid]<nums[en]){
en=mid;
}
else{
st=mid+1;
}
}
return nums[st];
}
};
'Algorithm > 이분탐색' 카테고리의 다른 글
프로그래머스 숫자게임 c++ // 이진탐색, 투포인터 (1) | 2024.10.27 |
---|---|
[Algo] 백준 가장 긴 바이토닉 부분 수열 c++ // LIS, LDS, (dp), 이분탐색 (0) | 2024.09.15 |
백준 14003 LIS 5 c++ // LIS 이분탐색 오류수정, LIS 출력하는법 (0) | 2024.05.15 |
백준 12015 LIS c++ // 이분탐색, LIS nlgn풀이 종결?, 한계 (0) | 2024.05.15 |
백준 13423 ThreeDots c++ // 이분탐색 (0) | 2024.04.23 |