当前位置: 首页 > news >正文

面试题. 搜索旋转数组

搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。

示例1:

 输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5输出: 8(元素5在该数组中的索引)

示例2:

 输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 11输出:-1 (没有找到)

代码如下:

//二分查找法--数组有序
class Solution {
public:int search(vector<int>& arr, int target) {int n=arr.size();if(arr[0]==target){return 0;}  int left=0;int right=n-1;while(left<=right){int mid=left+(right-left)/2;if(arr[mid]==target)//含有重复值{while(mid>1&&arr[mid-1]==arr[mid]){mid--;}return mid;}else if(arr[left]>arr[mid])//如果arr[left]>arr[mid]说明数组在arr[mid]和arr[right]之间是有序的{if(target>arr[mid]&&target<=arr[right])//当target在arr[mid]与arr[right]之间时,使用二分查找{left=mid+1;}else{right=mid-1;}}else if(arr[left]<arr[mid])//如果arr[left]<arr[mid]说明数组在arr[left]和arr[mid]之间是有序的{if(target>=arr[left]&&target<arr[mid])//当target在arr[left]与arr[mid]之间时,使用二分查找{right=mid-1;}else{left=mid+1;}}else{left++;//数组中有重复时,并且nums[left]!=target}}return -1;}
};

http://www.lryc.cn/news/140326.html

相关文章:

  • 前端需要理解的数据治理与异常监控知识
  • ip_vs 原理解析 (四)hook 后的开始 一
  • 【论文解读】基于图的自监督学习联合嵌入预测架构
  • C++ 容器
  • 【PHP】PHP文件操作详解
  • 硬核旗舰南卡OE CC开放式耳机发布,重新定义百元开放式耳机新标杆!
  • 785. 判断二分图
  • 限时 180 天,微软为 RHEL 9 和 Ubuntu 22.04 推出 SQL Server 2022 预览评估版
  • 一款ccm的功率因素校正控制器ncp1654
  • 4.若依框架上传文件
  • Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
  • idea的debug断点的使用
  • 【UE】蓝图通信——事件分发器
  • Python爬虫分布式架构问题汇总
  • AIGC人工智能涉及三十六职业,看看有没有你的职业(一)
  • 万界星空科技/免费MES系统/免费质量检测系统
  • 解决IndexError: index 0 is out of bounds for axis 1 with size 0
  • Java中hashTable的基本介绍,细节讨论,使用注意事项,常用方法和底层的扩容机制
  • redis -实战记录
  • Mysql知识梳理
  • 文生图模型之Stable Diffusion
  • Java List循环安全删除元素
  • 2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • bert-base-chinese 判断上下句
  • vue3+vue-cli使用mockjs
  • Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题
  • 第 k 小整数
  • LeetCode 1448. 统计二叉树中好节点的数目:DFS
  • AR室内导航技术之技术说明与效果展示
  • 06-Numpy基础-线性代数