Leetcode(33)搜索旋转排序数组——二分法

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 阅读详情

题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [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], target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

思路

有序,查找。要素到齐,直接用二分。
这道题需要先找到旋转点,也用二分查找,条件是当中点值大于右边值时,说明旋转点在右半部分。
找到旋转点之后,比较目标值和旋转点,确定左右起始边界。

代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        if(nums.size() == 0) return -1;
        int left = 0;
        int right = nums.size() - 1;
        while(left < right){
                int mid = (left + right) / 2;
                if(nums[mid] > nums[right]) left = mid + 1;
                else right = mid;
        }
        int point = left;
        left = 0;
        right = nums.size() - 1;
        if(target >= nums[point] && target <= nums[right])left = point;
        else right = point;
        while(left <= right){
                int mid = (left + right) / 2;
                if(target == nums[mid])return mid;
            if(target < nums[mid])right = mid - 1;
            else left = mid + 1;
        }

        return -1;
    }
};

Leetcode No.33 搜索旋转排序数组(二分法) 一、题目描述 升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为[4,5,6,7,0,1,2] )。 请你在数组中搜索target ,如果数组中存在这个目标值,则返回它的索引,否则返回-1。 示例 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... 阅读详情

相关推荐

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

leetcode搜索旋转排序数组(假设按照升序排序的数组在预先未知的某个点上进行了旋转)

二分法,首先找到有序的 https://blog.youkuaiyun.com/qq_43109561/article/details/88089143

自强不息,厚德载物,未来可期 1061

保姆级教程:手把手教你从NASA Earthdata下载ASTER L2地表温度数据(附shp文件拖拽技巧)

本文提供了一份详细的NASA Earthdata平台ASTER L2地表温度数据下载教程,涵盖账号注册、数据筛选、shp文件拖拽技巧及质量检查等关键步骤。特别适合遥感领域初学者,帮助快速掌握高效获取ASTER L2T数据的方法,适用于城市热岛效应和农业监测等研究。

weixin_30736301的博客 470

LeetCode 中级 - 搜索旋转排序数组

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

whdAlive 's blog 2912

【LPDDR4 - 学习二】LPDDR4 介绍 ——LPDDR4 芯片引脚说明解析

本文系统解析了LPDDR4内存芯片的引脚定义与特性,重点介绍了272球POPFBGA封装的双通道架构。内容涵盖电源管理(三级供电架构与上电时序)、控制信号(差分时钟与复用命令总线)、数据接口(16位双向数据总线与选通信号)以及校准复位等核心模块。通过表格详细列明了各引脚电压范围、功能定义及工程注意事项,并附有典型封装球位分布图。全文基于JEDEC标准,为移动设备内存设计提供全面的硬件参考,特别强调电源时序控制、信号完整性及抗干扰设计等关键点。

zap15622077817的博客 2636

SAP批量数据导入实战:BDC、CATT、LSMW三大工具保姆级对比教程

本文深入对比了SAP系统中三大批量数据导入工具BDC、CATT和LSMW的核心定位、适用场景与实战操作。BDC适合复杂逻辑的编程式处理,CATT适合业务用户快速录制回放,LSMW则是数据迁移项目的结构化首选。文章提供了详细的选型决策框架、性能优化技巧及常见陷阱规避指南,帮助SAP顾问和开发者高效完成数据批量维护任务。

weixin_29213525的博客 151

[Leetcode] 33. 搜索旋转排序数组

题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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], targe...

技术小二郎的博客 834

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 897

【LeetCode】33. 搜索旋转排序数组 结题报告 (C++)

原题地址:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/description/ 题目描述:   假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的...

暮雨凉初透 475

SAP_PP模块中MRP中信号灯简介

一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。

我小时候很黑的博客 626

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5980

leetcode (力扣) 33. 搜索旋转排序数组 (二分法PLUS)

题目在这:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 思路分析: 这道题说了一堆题目描述,实际上就是给了一个数组nums,给了一个数target。从数组nums中找到target这个数就行了。 用if ....in ......就能直接做出来这道题,而且还不超时还能通过。 class Solution: def search(self, nums: List[int], target: int) -> int

深度不学习!!的博客 627

GD32F4xx 移植agile_modbus软件包与电能表通信

GD32F4XX 移植agile modbus软件包实现与DTSU电能表通信调试记录

madao1234的博客 1303

leetcode 33:搜索旋转排序数组,二分法

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

weixin_42212257的博客 190

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

二分法 leetcode 33.搜索旋转排序数组

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

weixin_44295130的博客 192

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LeetCode--33. 搜索旋转排序数组(二分法)

搜索旋转排序数组(C)1. 题目描述2. 题目分析3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 这道题我们需要关注的点有一下几个: 数组整体是升序的,并且数组中不存在重复的元素 数组在某一点进行了旋转 返回值是相同元素的下标,没有则返回-1 算法时间复杂度必须是O(logn) 从上面几点分析,要想时间复杂度达到O(logn),要使用二分法进行搜索。但是怎么处理旋转之后的数组呢...

魔法师の屋子★↓☆ 3186

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode33. 搜索旋转排序数组(二分法,python)

1. 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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]...

rosefun96的博客 481

leetcode 33.搜索旋转排序数组 二分法

拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分。将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。,因为我们能够根据有序的那部分判断出。将数组从中间分开成左右两部分的时候,哪个部分是有序的,并。

Alkali!的博客 371

LeetCode 33 35 搜索插入位置 搜索旋转排序数组 二分法

写在前面 将两道题放在一起的原因是两道题比较相似,35是简单二分,33是特殊情况的二分。 题目 33 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 来源:力扣(

zheren8247的博客 294

LeetCode 33. 搜索旋转排序数组(二分法)

1.题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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]...

Syntactic Sugar 194

【二分法】1.33. 搜索旋转排序数组(力扣总结)

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

嗑盐工作室 191

LeetCode 33:搜索旋转排序数组(Java实现)

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

qq_45093368的博客 387

LeetCode33 -- 搜索旋转排序数组 二分法

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

qq_41814874的博客 127

[二分法]leetcode33:搜索旋转排序数组(medium)

题解: 题解: class Solution { public: //解法1:STL算法,时间复杂度O(n),空间复杂度O(1) int search_1(vector<int>& nums, int target) { auto it=find(nums.begin(),nums.end(),target); if(it!=nu...

algsup 429

LeetCode Hot100【二分法-33. 搜索旋转排序数组】

可以修改算法,查找旋转排序数组中最小值出现的所有位置(如果最小值重复)。可以在二分查找中加条件来处理重复值。可以通过直接修改原数组来减少空间的使用。例如,修改数组元素来标记是否访问过,避免额外的空间分配。

qq_45940888的博客 593

二分法的灵活运用【leetcode33. 搜索旋转排序数组】

leetcode33. 搜索旋转排序数组。

weixin_43972246的博客 450
上一篇: Leetcode(32)最长有效括号-——传统栈解法&左右计数器
下一篇: Leetcode(34)在排序数组中查找元素的第一个和最后一个位置——二分法
softwareX4
博客等级 码龄9年 21粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值