[LeetCode153]Find Minimum in Rotated Sorted Array

来源:互联网 发布:阿里云免费证书配置 编辑:程序博客网 时间:2024/06/06 00:47

题目来源:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/    点击打开链接

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.

Subscribe to see which companies asked this question

这题要求在一个轮转了的排序数里面找到最小, 我可以用二分法来做。
首先我需要知道,于一个区A, 如果A[start] < A[stop], 那么一定是有序的了。
在一个轮转的排序数A, 我首先取中元素的A[mid]mid = (start + stop) / 2。 因
有重复元素, 那么就有种情况:
A[mid] > A[start], 那么最小一定在右半区, 譬如[4,5,6,7,0,1,2], 中元素77 > 4, 最小元素
一定在[7,0,1,2]这边, 于是我们继续个区间查找。
A[mid] < A[start], 那么最小一定在左半区, 譬如[7,0,1,2,4,5,6]件元素22 < 7, 我们继续
[7,0,1,2]个区间查找。


class Solution153{public:int findMin(vector<int> & nums){int size = nums.size(); //cout << size<<endl;if (size == 0)return 0;else if (size == 1)return nums[0];else if (size == 2)return min(nums[0], nums[1]);int left = 0;int right = size - 1;//cout << size << endl;while (left < right-1){  //注意细节 -1if (nums[left] < nums[right]){return nums[left];}int mid = (left + right) / 2;if (nums[mid] > nums[left]){left = mid + 1;}else if (nums[mid] < nums[left]){right = mid;  //注意不是 mid-1}}return min(nums[left], nums[right]);}};int main(){Solution153 solution;{vector<int> vec = { 2,1 };//solution.findMin(vec);cout << solution.findMin(vec) << endl;}system("pause");return 0;}





0 0