【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;
};
相关推荐
alphaTao2 小时前
LeetCode 每日一题 2025/11/3-2025/11/9
windows·leetcode
2301_796512522 小时前
Rust编程学习 - 问号运算符会return一个Result 类型,但是如何使用main函数中使用问号运算符
开发语言·学习·算法·rust
小龙报3 小时前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
晨非辰3 小时前
【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
c语言·开发语言·数据结构·c++·算法·面试·排序算法
三川6984 小时前
排序算法介绍
数据结构·算法·排序算法
智驱力人工智能9 小时前
基于视觉分析的人脸联动使用手机检测系统 智能安全管理新突破 人脸与手机行为联动检测 多模态融合人脸与手机行为分析模型
算法·安全·目标检测·计算机视觉·智能手机·视觉检测·边缘计算
2301_764441339 小时前
水星热演化核幔耦合数值模拟
python·算法·数学建模
循环过三天9 小时前
3.4、Python-集合
开发语言·笔记·python·学习·算法
priority_key11 小时前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序