• 剑指 Offer 11. 旋转数组的最小数字(简单)


    通过率 49.4%

    题目链接

    题目描述:

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。  

    示例 1:

    输入:[3,4,5,1,2]
    输出:1

    示例 2:

    输入:[2,2,2,0,1]
    输出:0

    思路:

    用二分,利用最小值左边的数大于等于其右边的数,且两边都是(非严格)递增的特性

    难点:二分边界的确定

    设区间为[l, r],则判断条件必须以r对应的值为准,在下面这两种情况,mid对应的值都大于l对应的值,单凭这点无法判断最小值是在mid的左边还是右边

     1 /*JavaScript*/
     2 /**
     3  * @param {number[]} numbers
     4  * @return {number}
     5  */
     6 var minArray = function(numbers) {
     7     let [l, r] = [0, numbers.length-1]
     8     while(l < r) {
     9         const mid = l+r >> 1
    10         if(numbers[mid] > numbers[r]) {
    11             l = mid+1
    12         }else if(numbers[mid] < numbers[0]) {
    13             r = mid
    14         }else {
    15             r--
    16         }
    17     }
    18     return numbers[l];
    19 };
  • 相关阅读:
    计算机网络
    RedHat 7本地yum源的配置
    linux 查看电脑信息
    liunx下的网络配置
    缺陷是什么
    linux下的yum的安装和配置
    软件测试术语总结
    Loadrunner相关流程
    防火墙的相关概念
    软件测试W模型
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15136696.html
Copyright © 2020-2023  润新知