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.
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
在一个(可能)倒转过的有序序列中找出最小的数。
最直观的做法是遍历所有的数找出最小,本题需要比这更优化的解法。
二分查找,如果没有倒转,直接返回第一个最小的数。
如果是倒转过的序列,找出递增序列的最后一个最大的数,再往右一个就是最小的数。
1 /** 2 * @param {number[]} nums 3 * @return {number} 4 */ 5 var findMin = function(nums) { 6 var start = 0, end = nums.length - 1, middle; 7 while(start < end){ 8 if(nums[start] < nums[end]) 9 return nums[start]; 10 middle = (start + end) >> 1; 11 if(nums[start] <= nums[middle]) 12 start = middle + 1; 13 else 14 end = middle; 15 } 16 return nums[start]; 17 };