(Array, Medium) Find Minimum in Rotated Sorted Array

송재호·2025년 2월 9일
0

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];       
    }
}
profile
식지 않는 감자

0개의 댓글

관련 채용 정보