【HOT100-二分查找】33. 搜索旋转排序数组

(旋转数组的)二分查找算法 二分查找算法(Binary Search)是一种高效的、应用广泛的查找算法。它是一种采用分治策略的算法。 基本二分查找算法 二分查找是针对顺序存储的有序序列的;二分查找的基本思想是:将目标元素与序列中位数比较,如果大于中位数则在右半段序列查找,反之在左半段查找。 为了能够方便表示(以升序序列为例),设置两个索引值start,end表示查找范围即下图中的两个灰色箭头,设置一个标记mid表示当前范围... 阅读详情

一、Leetcode题目

整数数组 nums 按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 向左旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 下标 3 上向左旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4

示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1

示例 3:

输入:nums = [1], target = 0
输出:-1

提示:

  • 1 <= nums.length <= 5000
  • -104 <= nums[i] <= 104
  • nums 中的每个值都 独一无二
  • 题目数据保证 nums 在预先未知的某个下标上进行了旋转
  • -104 <= target <= 104

二、解题思路

1. 题目中已经给出1 <= nums.length <= 5000的条件,所以不需要排除异常值。

2. 依然采用二分查找的方法,定义left和right,以及循环条件while left <= right,并且计算出mid的下角标。

3. 比较nums[mid]与target的大小,如果恰好等于,那么直接返回mid,就是我们需要找的目标值下角标;接下来比较nums[mid]和nums[right]的大小,如果nums[mid]<nums[right],那么说明升序数组在nums[mid]右侧,进一步比较target和nums[mid]、nums[right]的值,如果target在两者中间,那么left  = mid+1,否则right = mid-1。反之,比较nums[mid]和nums[left]的大小,如果nums[mid]>nums[left],那么说明升序数组在nums[mid]的左侧,进一步比较target与nums[mid]、nums[left]的大小,如果target在两者中间,那么right = mid-1,反之,left = mid+1。

4. 最后找不到target返回-1。

三、代码块

class Solution:
    def search(self, nums:List[int], target:int)->int:
        left,right = 0, len(nums)-1
        while left <= right:
            mid = left+(right-left)//2
            if nums[mid] == target:
                return mid
            elif nums[mid]< nums[right]:#升序数组在右侧
                if target <= nums[right] and target > nums[mid]:
                    left = mid+1
                else:
                    right = mid-1
            else:#升序数组在左侧
                if target >= nums[left] and target < nums[mid]:
                    right = mid-1
                else:
                    left = mid+1
        return -1

33. 搜索旋转排序数组(Search in Rotated Sorted Array) 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 分析 数组旋转 本题是数组,而且要求时间复杂度为 O(log n) 。应该能够自然想到二分查找。 但是直接使用二分查找行不行呢?我们看一看下面这个例子: 在数组[3 4 5 阅读详情

相关推荐

leetcode-hot100-11二分查找

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]思路:用两次二分查找,第一次找出第一个等于 target 的元素的位置,第二次找出最后一个等于 target 的元素的位置。

weixin_52568554的博客 270

搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [4,5,6,7,0,1,2], targ...

Wang.T的博客 5406

33. 搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。 给你 旋转后 的数组 nums 和一.

. 990

leetcode:33. 搜索旋转排序数组

对于旋转数组,nums=[4,5,6,7,0,1,2]

OceanStar的博客 1010

【知识点总结】电路原理 第一讲

大家好,从今天起,我将开始更新自上大学以来所学到的各种知识,之所以选择更新它们是因为最近我一直在收拾整理自己自上大学以来所收获到的各种知识,看着那厚厚一沓的书本心里不由得犯愁。如果我想找到特定的知识,那岂不是得翻到猴年马月。俗话说得好,下雨天打鞋子,闲着也是闲着,为此我设置一个专栏,将知识点一一分类总结,目的在于更好的整理所学的知识。本人学艺不精,有一些知识点地方可能存在瑕疵,希望各位大佬可以多多指教。以下是本篇文章正文内容虚断:一般通用性运算放大器的正反向输入端之间的电阻非常非常的大。

weixin_51130221的博客 4万+

BAPI_REPMANCONF1_CREATE_MTS实战:从MFBF事务码到精准零件反冲的代码级解析

本文深入解析了如何通过BAPI_REPMANCONF1_CREATE_MTS函数实现SAP生产模块中的零件反冲自动化。文章对比了MFBF事务码的手动操作与BAPI编程的优劣,详细拆解了函数的核心参数、数据结构、调用流程及事务控制,并提供了从数据准备到凭证获取的完整代码示例与避坑指南,帮助开发者实现高效、精准的批量投料过账。

weixin_29240343的博客 191

力扣HOT100之二分查找:33. 搜索旋转排序数组

作为前置题,有了这道题的基础以后做本题就比较轻松了。这里先简单说一下寻找旋转排序数组中的最小值。这道题第一次做,没什么思路,直接去看灵神的题解了,看完题解才发现需要先做。我们阅读完题目不难看出,经过旋转后,数组。

weixin_52151595的博客 654

智能体在车联网中的应用:一份详尽到每日的100天学习路线图

这100天的旅程,是一次对毅力、学习方法和工程实践能力的综合考验。它不仅关乎掌握一系列技术点,更关乎培养解决复杂系统性问题的思维模式——将宏观的交通需求分解为微观的智能体决策,再通过多智能体协同涌现出宏观的智能行为。当你完成这份大纲时,你将拥有的不仅是一个项目作品集,更是一套应对“智能体+车联网”乃至更广泛AI+垂直领域挑战的方法论。未来已来,期待你成为构建智能交通新生态的关键贡献者。

IT深耕十余载,大道之简 1333

刷题记录 HOT100 二分查找-4:33. 搜索旋转排序数组

难度:中等整数数组nums按升序排列,数组中的值。在传递给函数之前,nums在预先未知的某个下标k)上进行了,使数组变为(下标计数)。例如,在下标3处经旋转后可能变为。给你的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。你必须设计一个时间复杂度为O(log n)的算法解决此问题。

weixin_44610684的博客 643

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2924

【逐函数讲解ORB_SLAM3源码】获取普通帧率、关键帧、IMU数据

获得imu的旋转 mRwc * mImuCalib.mTcb.rotationMatrix(); Sophus::SE3 mTwc 创建ORB_SLAM3系统 Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_RGBD, true, 0, file_nam

小秋 AI SLAM 入门实战教程 1245

hot100:二分查找--33. 搜索旋转排序数组

该文介绍了在旋转有序数组中查找目标值的二分搜索算法。关键思路是每次二分时至少有一半(左或右)是有序的,通过比较目标值与有序部分的边界,将搜索范围缩小到有序部分或另一部分。算法保持O(logn)时间复杂度和O(1)空间复杂度,与标准二分查找相同。实现时需判断mid左右哪部分有序,并检查目标值是否在有序范围内,从而决定搜索方向。这种改进的二分法有效解决了旋转数组的搜索问题。

weixin_51243388的博客 225

在 ABAP Cloud 里优雅读取与解析 XML:用 sXML Reader 把接口数据落成结构化 ABAP

ABAP Cloud中XML解析实践 摘要:本文介绍了在ABAP Cloud环境下解析XML数据的最佳实践。针对企业系统中常见的XML格式数据,文章推荐使用sXML库中的CL_SXML_STRING_READER进行流式解析,而非传统的DOM方式。重点解析了命名空间(Namespace)、属性(Attribute)和CDATA等关键概念的处理方法,并比较了两种读取属性的策略:通扫所有属性(NEXT_ATTRIBUTE)和精准取值(GET_ATTRIBUTE_VALUE)。文章提供了完整的ABAP Cloud

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 190

【Hot 100 刷题计划】 LeetCode 33. 搜索旋转排序数组 | C++ 二分查找题解

摘要:LeetCode 33题要求在旋转后的有序数组中查找目标值。解题思路采用两次二分查找:首先找到旋转点(最小值位置),然后根据目标值与首元素比较确定搜索区间(左半段或右半段),最后在有序区间内执行标准二分查找。算法时间复杂度为O(log n),符合题目要求。C++实现通过比较中间值与参照物确定旋转点,再调整搜索边界进行目标值查找。

qq_51233453的博客 232

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1300

【高级雷达感知与学习】 第十三章 可解释性与物理–感知融合(Physics-Informed ML)

本文提出了一种面向雷达感知的物理约束学习方法,将雷达物理先验(RCS、SNR、距离衰减)嵌入神经网络,解决纯数据驱动模型的样本效率低、泛化能力弱和决策不可信问题。通过三种融合范式(混合建模、物理正则化、PINNs)实现机理与数据协同建模,并设计了物理引导显著图解决雷达可解释性语义错位问题。实验表明,物理约束可提升40%样本效率,增强低信噪比场景鲁棒性。代码实现包含物理正则化损失、可解释性分析和消融实验,为雷达感知系统提供了可迁移的工程范本。

VectorShift的博客 186

leetcode hot100 33. 搜索旋转排序数组 medium 二分查找

尽管逻辑多了一层判断,但依然每次排除了数组的一半。例如:[4,5,6,7,0,1,2]然后判断 target 在哪一侧。数组原本有序,但被旋转。只使用了常数个指针变量。

踩坑记录 76

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

力扣hot100 | 二分查找 | 35. 搜索插入位置、74. 搜索二维矩阵、34. 在排序数组中查找元素的第一个和最后一个位置、33. 搜索旋转排序数组、153. 寻找旋转排序数组中的最小值

力扣题目链接给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。

m0_56231308的博客 1133

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HOT100--Day22--74. 搜索二维矩阵,34. 在排序数组中查找元素的第一个和最后一个位置,33. 搜索旋转排序数组

HOT100–Day22–74. 搜索二维矩阵,34. 在排序数组中查找元素的第一个和最后一个位置,33. 搜索旋转排序数组 每日刷题系列。今天的题目是《力扣HOT100》题单。 题目类型:二分查找。 关键: 今天的题目都是“多次二分” 74题,掌握如何把有序矩阵,flatten成一维。 34题,懂得如何找元素的最左索引。 35题,懂得“翻转有序数组”的特性。如何找最小值的位置?要搜索怎么搜?

m0_60740070的博客 383

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【leetcode hot 100 33】搜索旋转排序数组

【代码】【leetcode hot 100 33】搜索旋转排序数组。

longii11的博客 348

LeetCode 热题 HOT 100 -------34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)33. 搜索旋转排序数组(二分查找)

//二分查找法,找的是一个数组中的target值的最小索引和最大索 class Solution { public int[] searchRange(int[] nums, int target) { int left = binarySearch(nums , target-1); int right = binarySearch(nums , target) -1 ; if(left<=right && nums[left.

置身于量子事业的软件开发爱好者 289

hot100 33.搜索旋转排序数组

(1)如果x > nums[n - 1],说明x在第一段中,那么target也必须在第一段中(否则target一定在x的右边),且x必须大于等于target。(1)如果target > nums[n - 1],那么target一定在第一段[0,i - 1]中,于是在[0,i - 1]中二分查找target。(2)如果x <= nums[n - 1],说明x在第二段中(或者nums只有一段),那么target可以在第一段,也可以在第二段。(a)如果target在第一段,那么target一定在x左边。

m0_63814538的博客 380

二刷hot100-33.搜索旋转排序数组

在二分查找的基础上加了一些判断,因为数组并非单纯的有序;

2302_78497251的博客 27

【l力扣hot100】二分查找专题|35、74、34、33、153、4

二分查找看似简单,却是面试中最容易"翻车"的题型之一。边界写 l < r 还是 l <= r?r = mid 还是 r = mid - 1?稍有不慎就会死循环或漏答案。本专题覆盖力扣 Hot 100 中所有二分相关题目,从最基础的搜索插入位置,到旋转数组找最小值、搜索目标值,再到两个正序数组的中位数,由浅入深,逐题拆解。每道题重点讲清三个问题:搜索空间怎么定、判断条件怎么写、边界怎么收缩。不背模板,理解本质,真正做到举一反三。

2401_87144364的博客 222

【笔面试算法学习专栏】二分查找专题:力扣hot100经典题目深度解析

本文系统讲解二分查找算法的核心思想与高级应用,聚焦力扣hot100中三道经典题目:搜索旋转排序数组、在排序数组中查找元素的第一个和最后一个位置、寻找旋转排序数组中的最小值。文章深入剖析二分查找的原理、时间复杂度分析与适用条件,提供标准模板代码,并通过题目解析展示如何应对变式场景。最后总结二分查找的常见变式与面试考点,帮助读者掌握这一高效搜索算法。

m0_50709695的博客 795

【JAVA算法|hot100】二分查找类型题目详解笔记

本文总结了LeetCode Hot100中的5道二分查找相关题目:35题(搜索插入位置)、74题(搜索二维矩阵)、34题(查找元素起止位置)、33题(旋转数组搜索)和153题(寻找旋转数组最小值)。每道题都提供了Java解法代码和解题思路,重点讲解了如何应用二分查找及其变种来解决各类搜索问题,包括处理边界条件、二维矩阵转换、重复元素范围确定以及旋转数组的特殊处理等。所有解法均满足O(logn)时间复杂度要求,是掌握二分查找算法的典型范例。

2303_80850235的博客 642
上一篇: 【HOT100-二分查找】34. 在排序数组中查找元素的第一个和最后一个位置
下一篇: 【HOT100-二分查找】153. 寻找旋转排序数组中的最小值
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值