【LeetCode热题100(64/100)】搜索旋转排序数组

题目地址: 链接

思路: 可以在纸上模拟出所有 l = mid + 1 的情况,即targetmid右侧的情况,其一定满足以下任一一条:

  1. 严格递增
  2. 右部分有序 (target > nums[mid] && target < nums[l] && nums[mid] <= nums[l])
  3. 左部分有序 (target < nums[mid] && target < nums[l] && nums[mid] >= nums[l])
    其余所有情况targetmid左侧,

最后判断num[l]是否为target即可,若相等,返回查找的序号值,否则返回-1

js 复制代码
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let n = nums.length;
    let [l, r] = [0, nums.length];
    while(l < r) {
        let mid = l + r >> 1;
        if((target > nums[mid] && target < nums[l] && nums[mid] <= nums[l]) // nums[mid] < nums[l]
        || (target < nums[mid] && target < nums[l] && nums[mid] >= nums[l]) // nums[mid] > nums[l]
        || (target > nums[mid] && target > nums[l] && nums[mid] >= nums[l]) // 严格递增
        ) l = mid + 1;
        else r = mid;
    }
    console.log('l ==>', l)
    return nums[l] == target ? l: -1;
};
相关推荐
地平线开发者4 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮4 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者5 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考5 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx8 小时前
CART决策树基本原理
算法·机器学习
Wect8 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱9 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway16 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风16 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect16 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript