搜索旋转排序数组
整数数组 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
- 1 0 4 10^4 104 <= nums[i] <= 1 0 4 10^4 104
nums 中的每个值都 独一无二
题目数据保证 nums 在预先未知的某个下标上进行了旋转
- 1 0 4 10^4 104 <= target <= 1 0 4 10^4 104
题目看完,感觉跟二分查找沾边,但是数组从中间某个位置调换了。
按照二分查找的思路,应该对比target跟nums[mid]的大小,但对比之后发现下一步如何移动跟mid所处位置有关,直接看代码:
class Solution:def search(self, nums: list, target: int) -> int:return self.search_helper(nums, target, 0, len(nums) - 1)def search_helper(self, nums: list, target: int, left: int, right: int):if left > right:return -1mid = (left + right) // 2if nums[mid] == target:return midif nums[left] == target:return leftif nums[right] == target:return right#此时mid两侧必定是一边有序一边无序,测试左边如果有序那右边无序,否则右边有序if nums[left] < nums[mid]:if target < nums[mid] and target > nums[left]:return self.search_helper(nums, target, left + 1, mid - 1)else:return self.search_helper(nums, target, mid + 1, right - 1)else:if target > nums[mid] and target < nums[right]:return self.search_helper(nums, target, mid + 1, right - 1)else:return self.search_helper(nums, target, left + 1, mid - 1)
代码中的注释是关键,如果nums[mid]不等于target,那么mid两边一定有一边是有序而另一边一定无序,是否有序只要测试nums[left]与nums[mid](nums[mid]与nums[right]也行)就可以知道是否有序,当确定有序的一边后,就可以使用二分查找的条件了。17,18行(22,23行)表示需要先有序再二分。
相关文章:
搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nums[1], …, …...
Steam搬砖项目:最长久稳定的副业!
项目应该大家都有听说话,但是细节问题,如何操作可能有些不是很清楚,今天在这里简单分享一下。 这个Steam搬砖项目主要赚钱汇率差和价值差,是一个细分领取的小项目。 不用引流,时间也是比较自由的,你可以兼…...
最小化安装移动云大云操作系统--BCLinux-R8-U8-Server-x86_64-230802版
CentOS 结束技术支持,转为RHEL的前置stream版本后,国内开源Linux服务器OS生态转向了开源龙蜥和开源欧拉两大开源社区,对应衍生出了一系列商用Linux服务器系统。BC-Linux V8.8是中国移动基于龙蜥社区Anolis OS 8.8版本深度定制的企业级X86服务…...
神经网络基础-神经网络补充概念-05-导数
概念 导数是微积分中的一个概念,用于描述函数在某一点的变化率。在数学中,函数的导数表示函数值随着自变量的微小变化而产生的变化量,即斜率或变化率。 假设有一个函数 f(x),其中 x 是自变量,y f(x) 是因变量。函数…...
kubernetes — 安装Ingress
1、 Ingress 1、安装-Nginx-Ingress kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml 2、设为默认的Ingress [rootk8s01 ~]# vim default_ingress.yaml apiVersion: networking.…...
SSR使用HTTPS
1.安装 npm i browser-sync 2. 再angular.json里配置 "serve-ssr": {"builder": "nguniversal/builders:ssr-dev-server","options": {"ssl": true,"sslCert": "./node_modules/browser-sync/certs/server…...
Spring Boot中使用validator如何实现接口入参自动检验
文章目录 一、背景二、使用三、举例 一、背景 在项目开发过程中,经常会对一些字段进行校验,比如字段的非空校验、字段的长度校验等,如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护,如何更加规范和优…...
thinkphp 5 实现UNION ALL 3个联表查询,并且带上搜索条件,名称,时间,手机号
在ThinkPHP 5中实现带有搜索条件、名称、时间和手机号的3个联表查询(UNION ALL),您可以按照以下步骤进行操作: 确保已经配置好数据库连接信息和相关的模型。 使用union()方法来构建3个联表查询,同时在每个查询中添加所…...
React 之 Router - 路由详解
一、Router的基本使用 1. 安装react-router react-router会包含一些react-native的内容,web开发并不需要 npm install react-router-dom 2. 设置使用模式 BrowserRouter或HashRouter Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件Bro…...
框架分析(1)-IT人必须会
框架分析(1)-IT人必须会 专栏介绍当今主流框架前端框架后端框架移动应用框架数据库框架测试框架 Angular关键特点和功能:组件化架构双向数据绑定依赖注入路由功能强大的模板语法测试友好 优缺点分析优点缺点 总结 专栏介绍 link 主要对目前市…...
前端面试的游览器部分(7)每天10个小知识点
目录 系列文章目录前端面试的游览器部分(1)每天10个小知识点前端面试的游览器部分(2)每天10个小知识点前端面试的游览器部分(3)每天10个小知识点前端面试的游览器部分(4)每天10个小知…...
认识Junit
1. 前言 2. Junit注解 2.1. 常用的注解 2.1.1. Test 表示当前方法是一个测试方法(不需要main来执行) Test void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver new ChromeDriver();webDriver.get("https:/…...
Unity C# 引用池 ReferencePool
Unity C# 引用池 ReferencePool 1.目的 对于多次创建的数据使用new 关键字是十分消耗性能的,使用完成后由GC去自动释放,当一个类型的数据频繁创建可以使用引用池进行管理。 2.实现 项目目录 IReference 接口 要放入引用池的数据只需要继承这个接口…...
opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()
人脸识别是指程序对输入的人脸图像进行判断,并识别出其对应的人的过程。人脸识别程 序像我们人类一样,“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然,要实现人脸识别,首先要判断当前图像内是否出现了人脸&…...
〔013〕Stable Diffusion 之 图片自动评分和不健康内容过滤器 篇
✨ 目录 🎈 下载咖啡美学评价插件🎈 咖啡美学评价使用🎈 不健康内容过滤器插件🎈 下载咖啡美学评价插件 想让系统帮你的图片作品打分评价,可以下载咖啡美学自动评价插件插件地址:https://github.com/p1atdev/stable-diffusion-webui-cafe-aesthetic也可以通过扩展列表…...
6.RocketMQ之消费索引文件ConsumeQueue
功能:作为CommitLog文件的索引文件。 本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface…...
Appium-移动端自动测试框架,如何入门?
Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 1、为什么要使用Appium? 2、如何搭建Appium工具环境?(超详细) 3、通过demo演示Appium的使用 4、Appium如何…...
复数混频器、零中频架构和高级算法开发
文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术,全都是干货!其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解,知其然不知其所以然。好好研读这篇文章,相信会让你有种恍然大悟的感觉。 RF工程常被视为…...
Web 拦截器-interceptor
拦截器是一种动态拦截方法调用的机制,类似于过滤器,是Spring框架提出的,用来动态拦截控制器方法的执行。 其作用是拦截请求,在指定方法调用前后,根据业务执行预设代码。 实现步骤 1.定义拦截器,实现Handl…...
Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化
目录 引出类什么时候被加载JVM中创建对象几种方式1.new 看到new : new Book()2.反射 Class.forName(“包名.类名”)如何获取Class对象【反射的基础】案例:连接数据库方法 3.克隆(拷贝)clone浅拷贝深拷贝案例 序列化和反序列化对象流-把对象存…...
PlugY完整指南:暗黑破坏神2终极单机优化解决方案
PlugY完整指南:暗黑破坏神2终极单机优化解决方案 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY PlugY是《暗黑破坏神2:毁灭之王》最强大的单…...
告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)
零代码玩转Arduino巡线小车:KRobot图形化编程全攻略 第一次接触Arduino时,看到满屏的C代码是不是头皮发麻?作为教育工作者或创客爱好者,你可能更希望把时间花在创意实现上,而不是纠结于语法错误。现在,通过…...
【北约】认知雷达信号处理 Cognitive Radar Signal Processing
本文仅供学习使用如有侵权,请联系本人删除 This article is for educational purposes only. If there is any copyright infringement, please contact me to have it removed....
ncmdumpGUI:实现NCM格式自由转换的音频解决方案
ncmdumpGUI:实现NCM格式自由转换的音频解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 痛点剖析:NCM格式的技术民主化阻碍 格…...
Anthropic Economic Index: AI对软件开发的影响 — 深度解读
原文: AI’s impact on software development 发布机构: Anthropic 解读日期: 2026年3月25日 一、研究背景与方法论 1.1 研究动机 软件开发工作虽然在现代经济中占比较小,但影响力巨大。过去两年,能够辅助甚至自动化大量编程工作的AI系统的引入&#x…...
GTE文本向量模型部署全攻略:从零到一搭建企业级文本处理服务
GTE文本向量模型部署全攻略:从零到一搭建企业级文本处理服务 1. 项目介绍与核心价值 如果你正在寻找一个能一站式解决中文文本分析难题的工具,那么GTE文本向量模型可能就是你的答案。想象一下,一个模型就能帮你识别文档里的关键人物、地点&…...
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习 开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证) 一、痛点:AI 写代码很快,但…...
软件工程师如何转型AI工程师 第三章 技术路线的选择——不要从头学起
第三章 技术路线的选择——不要从头学起 在转型的技术路径上,我见过最多的弯路长这个样子:某个工程师下定决心要搞AI,于是买了一本《深度学习》(花书),从第一章线性代数开始硬啃,啃到反向传播…...
PROJECT MOGFACE系统重装辅助工具:Win10镜像下载与自动化安装配置
PROJECT MOGFACE系统重装辅助工具:Win10镜像下载与自动化安装配置 每次重装系统,你是不是都觉得头大?找官方镜像怕下到带病毒的,制作启动盘步骤繁琐,安装过程还得守在电脑前点下一步,装完系统还得手动装驱…...
Node.js内存泄漏排查指南:从Chrome DevTools到heapdump的实战记录
Node.js内存泄漏排查实战:从预警信号到精准修复 当线上监控系统突然发出内存告警,你的Node.js服务正在以每小时100MB的速度吞噬服务器内存——这不是演习,而是一场真实的生产事故前兆。作为经历过数十次内存泄漏战役的老兵,我将带…...
