Leetcode(11)

来源:互联网 发布:移动和网络怎么没信号 编辑:程序博客网 时间:2024/06/05 05:17

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/#/description

Suppose an array sorted in ascending order 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.


Solution:

采用二分法解题,我们要保证最小值始终在start和end之间,然后循环考察分以下3种情况:

1、nums[start] < nums[end], 说明最小值就是start

2、nums[mid] > nums[end],说明最小值在[mid + , end]之间

3、非1,2,则最小值在[start, mid]之间

最后返回nums[start]

int FindMinimumInRotatedSortedArray::findMin(std::vector<int>& nums) {    int start = 0, end = nums.size() - 1;    while (start < end) {        if(nums[start] < nums[end]) {            break;        }        int mid = (start + end) / 2;        if(nums[mid] > nums[end]) {            start = mid + 1;        } else {            end = mid;        }    }    return nums[start];}