牛客Top101 BM21 旋转数组的最小数字--JS实现

描述

有一个长度为 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
};

猜你喜欢

转载自blog.csdn.net/qq_43781887/article/details/128215485