0
点赞
收藏
分享

微信扫一扫

LeetCode 153. Find Minimum in Rotated Sorted Array

左手梦圆 2022-04-04 阅读 57
leetcode

题目描述

Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:

[4,5,6,7,0,1,2] if it was rotated 4 times.
[0,1,2,4,5,6,7] if it was rotated 7 times.
Notice that rotating an array [a[0], a[1], a[2], …, a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], …, a[n-2]].

Given the sorted rotated array nums of unique elements, return the minimum element of this array.

You must write an algorithm that runs in O(log n) time.

解题思路

利用二分查找查找分界点。

代码

class Solution:
    def findMin(self, nums: List[int]) -> int:
        n = len(nums)
        start = 0
        last = n - 1
        pos = 0
        while start <= last:
            mid = (start + last) >> 1
            if nums[mid] < nums[mid - 1] and (mid == n - 1 or nums[mid] < nums[mid + 1]):
                pos = mid
                break
            elif nums[mid] > nums[last]:
                start = mid + 1
            else:
                last = mid - 1
        
        return min(nums[0], nums[pos])
举报

相关推荐

0 条评论