[Leetcode] Find Minimum in Rotated Sorted Array

来源:互联网 发布:江西财经大学网络平台 编辑:程序博客网 时间:2024/06/06 14:19

描述

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

一个有序数组,经过循环移位后得到新数组,求新数组中最小的元素。

分析

对于一个循环移位数组,有三种状态:
1. 没有移位,此时 nums[lo]<nums[mi]<nums[hi] ,此时最小值位于数组开头。
2. 移位,且最小值在 nums[mi] 左边,此时 nums[mi]<nums[lo]<nums[hi],右半部分有序且递增,往左半部分查找。
3. 移位,且最小值在 nums[mi] 右边,此时 nums[hi]<nums[lo]<nums[mi],左半部分有序且递增,往右半部分查找。

知道了这些之后,就很容易写出对应代码。

相关题目:
Search in Rotated Sorted Array
Search in Rotated Sorted Array II

代码

class Solution {public:    int findMin(vector<int>& nums) {        if (nums.empty()) return NULL;        int lo = 0, hi = nums.size() - 1;        if (nums[lo] < nums[hi]) return nums[lo];        while (lo < hi) {            int mi = lo + (hi - lo) / 2;            if (nums[mi] > nums[hi]) lo = mi + 1;            else hi = mi;        }        return nums[lo];    }};
0 0