题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
知识点:
- 二分查找
解题思路:
- 这道题是一道典型的利用二分查找的题
- 我们首先可以模拟看一下有多少种可能,对应的4种判断条件
- 12345 arr[left] < arr[right],直接返回arr[left]
- 34512 arr[left] < arr[mid], left = mid + 1;
- 45123 arr[mid] < arr[right],right = mid;
- 10111 特殊情况,left++
- 循环完记得返回arr[left]
- 注意:我们最后返回的值为arr[left],所以记得循环的初始条件不能为等于,不然当推出循环时便违法得到我们想要的值
解题代码:
function minNumberInRotateArray(rotateArray){// write code hereif(rotateArray.length === 0) return 0;let left = 0;let right = rotateArray.length - 1;while(left < right) { // 这里不能是等于,如果是等于最后退出时已经不是我们想要的数了let mid = (left + right) >> 1;if(rotateArray[left] < rotateArray[right]) {return rotateArray[left];}else if(rotateArray[left] < rotateArray[mid]) {left = mid + 1;}else if(rotateArray[mid] < rotateArray[right]) {right = mid;}else {left++;}}return rotateArray[left];
