【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;
};
相关推荐
β添砖java5 分钟前
深度优先搜索DFS
算法·深度优先
小糯米6018 分钟前
C++ 并查集
java·c++·算法
IronMurphy8 分钟前
【算法三十四】39. 组合总和
算法·深度优先
重庆小透明8 分钟前
力扣刷题【3】相交链表
算法·leetcode·链表
算法鑫探8 分钟前
C语言实战:学生成绩统计与分析
c语言·数据结构·算法·新人首发
IAUTOMOBILE11 分钟前
Code Marathon 项目源码解析与技术实践
java·前端·算法
Lyyaoo.11 分钟前
【JAVA基础面经】深拷贝与浅拷贝
java·开发语言·算法
x_xbx35 分钟前
LeetCode:202. 快乐数
算法·leetcode·职场和发展
老虎06271 小时前
LeetCode热题100 刷题笔记(第四天)二分 「 寻找两个正序数组的中位数」
笔记·算法·leetcode