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.
思路;
这道题寻找旋转有序数组的最小值,最好不能通过直接遍历整个数组来寻找,过于简单粗暴,应该考虑将时间复杂度从简单粗暴的O(n)缩小到O(logn),所以,二分查找喽
首先判断这个有序数组是否旋转了,通过比较第一个数和最后一个数的大小,如果第一个数小雨最后一个数,说明书组没旋转啊,直接返回第一个书就行,反之就进一步搜索。定义l和r两个指针,指向开头和结尾。还要找到中间的数,然后和l指的数进行比较,如果中间的数大,则继续查找右半段数组,反之查找左半段,终止条件是当左右两个指针相邻,返回小的那个数就okay啦
var findMin = function(nums) {
if (nums[0] < nums[nums.length - 1]) {
return nums[0]
} else {
var l = 0;
var r = nums.length - 1;
var m;
while (l+1 < r) {
m = Math.floor((l + r) / 2);
if (nums[l] < nums[m]) {
l = m;
} else if (nums[l] > nums[m]) {
r = m;
}
}
return Math.min(nums[l], nums[r]);
}
};