搜索旋转排序数组

news/2024/11/2 3:35:48/

题目:

整数数组 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) 的算法解决此问题。

示例:

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

解题思路:

因为题目要求时间复杂度为 O(log n),所以本题运用二分搜索法的思路来实现

 1.相当于数组是由两个升序序列组成的,第一个序列中最小的元素比第二个序列中最大的元素还要大,所以在二分查找的过程中需要额外加上判断条件;
 2.若nums[mid]>=nums[left],当且仅当target >= nums[l] && target < nums[mid]时,target在[left,mid]范围内,此时将right移动到mid-1
 3.相反,若nums[mid]>=nums[left],当且仅当target > nums[mid] && target <= nums[r]时,target在[mid,right]范围内,此时将left移动到mid+1

源代码如下:

int search(vector<int>& nums, int target) {int l = 0, r = nums.size() -1;while (l <= r){int mid =( l + r) / 2;if (target == nums[mid]) return mid;//说明mid在第一个序列中if (nums[l] <= nums[mid]){//判断target是否在数组的第一个升序序列中if (target >= nums[l] && target < nums[mid])r = mid-1;elsel = mid+1;}//说明mid已经在数组的第二个升序序列中了else{//判断target是否在第二个升序序列中if (target > nums[mid] && target <= nums[r])l = mid +1;elser = mid -1;}}//没找到,返回-1return -1;}


http://www.ppmy.cn/news/81855.html

相关文章

万国数据财报:股价暴跌51%,盈利能力下滑,万国数据前景黯淡

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入增长前景 万国数据&#xff08;GDS&#xff09;在3月中旬发布2022财年财务业绩时&#xff0c;为该公司提供了2023财年全年的收入指引。考虑到市场对万国数据的预期和其股价历史表现&#xff0c;猛兽财经认为&#xff0…

人工智能专栏第十一讲——指代消歧

指代消歧是自然语言处理领域的一个重要问题,指的是在文本中确定代词所指的具体对象。在日常生活中,人们经常使用代词来替代前面出现过的名词,以避免重复,提高表达效率。但是,在处理自然语言文本时,计算机往往难以准确地理解代词所指的对象,因此需要进行指代消歧来解决这…

GP05丨多因子IC对冲

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们分享股票社群第5期量化策略——多因子IC对冲。 在前几期中&#xff0c;我们分享了GP01多因子、ETF轮动策略及Plus版本、网格等等。本期我们继续分享多因子策略。 策略背景与…

Redis配置、优化以及相命令

一、关系数据库和非关系型数据库 1、关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言…

Raidrive安装配置,结合alist实现将webdav网盘挂载为本地磁盘(保姆级教程)

目录 1. 下载安装2. 添加网盘3. 常见报错3.1 不要勾选安全连接3.2 路径必须填写正确 4. 测试效果总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 书接上文 AList挂载工具安装搭建使用教程&#xff0c;快速访…

电子电气架构——IP地址获取方式汇总

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

Meta 开源语音 AI 模型支持 1,100 多种语言

自从ChatGPT火爆以来&#xff0c;各种通用的大型模型层出不穷&#xff0c;GPT4、SAM等等&#xff0c;本周一Meta 又开源了新的语音模型MMS&#xff0c;这个模型号称支持4000多种语言&#xff0c;并且发布了支持1100种语言的预训练模型权重&#xff0c;最主要的是这个模型不仅支…

控制系统典型应用车型 —— 潜入顶升式AMR

车型介绍: “潜入顶升AMR”是由驱动装置车身装置升降装置等结构组成的高性能移动机器人。通过复杂的智能技术来合理的路径规划&#xff0c;以适应环境并在其中导航&#xff0c;结合近距离激光雷达、碰撞传感器等技术&#xff0c;可以在高速运转的同时&#xff0c;潜伏至货物固…