【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;
};
相关推荐
MediaTea8 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z8 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue8 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅8 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
MATLAB代码顾问10 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天10 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap10 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿10 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣66711 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-194311 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法