관리 메뉴

Mini

리트코드 153 회전 정렬 배열에서 최소값 찾기 c++ // 이분탐색 본문

Algorithm/이분탐색

리트코드 153 회전 정렬 배열에서 최소값 찾기 c++ // 이분탐색

Mini_96 2024. 5. 30. 15:32

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];
    }
};