zoukankan      html  css  js  c++  java
  • 33. 搜索旋转排序数组【中等】

    leetcode:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/

    方法一:

    有序数组查找,使用二分

    进行二分,l、r、mid,两边必有一边是有序的

    1、如果nums[l] <= nums[mid - 1],说明左侧有序

    (1)、如果target在左侧,在查找范围缩小到左侧

    (2)、如果target不在左侧,则一定在右侧,查找范围缩小到右侧

    2、否则右侧一定有序

      (1)、如果target在右侧,在查找范围缩小到右侧

    (2)、如果target不在右侧,则一定在左侧,查找范围缩小到左侧

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number}
     */
    var search = function(nums, target) {
        let l = 0;
        let r = nums.length - 1;
        let mid = -1;
        while (l <= r) {
            // 向上取整,避免l等于mid的情况
            mid = Math.ceil((l + r) / 2);
            console.log('l = ', l, ' r = ', r, ' mid = ', mid)
            if (target === nums[mid]) return mid;
            
            if (nums[l] <= nums[mid - 1]) {
                // 左侧有序
                if (target >= nums[l] && target <= nums[mid - 1]) {
                    r = mid - 1;
                } else {
                    l = mid + 1;
                }
            } else {
                // 右侧有序
                if (target >= nums[mid + 1] && target <= nums[r]) {
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            }
        }
        return -1;
    };

    -----smile

  • 相关阅读:
    19面向对象--特殊成员
    18面向对象--成员和组合
    17面向对象--三大特性
    16异常处理
    15(os、random、sys、)(json、pickle )
    14python模块之re
    13正则表达式
    12内置函数补充,递归以及二分法。
    Linux环境ftp搭建及问题总结
    运维之路—linux忘记密码修改(rd.breake 方式)
  • 原文地址:https://www.cnblogs.com/Walker-lyl/p/14629085.html
Copyright © 2011-2022 走看看