描述
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
数据范围:1≤n≤10000,数组中任意元素的值: 0≤val≤10000
要求:空间复杂度:O(1) ,时间复杂度:O(logn)
示例1
输入:
[3,4,5,1,2]
返回值:
1
示例2
输入:
[3,100,200,3]
返回值:
3
思路:感觉这个题目就是去找这个数组的顶端,像一个山峰一样,只需要找到山顶,山顶后的那个值就是最小值,如果一开始就是递增数组则最小值就是第一个值。
数组从左向右,依次查找,若找到降序排列的元素,即前一个>后一个,则最小元素为后一个,若遍历完成,仍然没有满足条件的元素(前一个>后一个),则最小元素为第一个。
完整代码:
function minNumberInRotateArray(rotateArray)
{
// write code here
// 先找到这个顶峰
let len=rotateArray.length;
for(let i=0;i<len;i++) {
if(rotateArray[i+1]<rotateArray[i]) {
return rotateArray[i+1];
}
}
// 如果一直都没找到则说明是一个递增数组,直接返回第一个即可
return rotateArray[0];
}
module.exports = {
minNumberInRotateArray : minNumberInRotateArray
};