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

力扣81. 搜索旋转排序数组 II

在这里插入图片描述
这一题和

力扣33. 搜索旋转排序数组

类似,唯一不同的就是数组中的元素可能有相同的值,而33题是互不相同的。
对此我们还是可以采取像33题那样,分情况判断mid在哪一个区间里面
唯一不同的是,可能存在重复的元素,那么遇到重复的元素要怎么办呢?
我们只需要判断mid和r是否重复即可,因为mid与r决定着在哪一个区间里面,而如果mid==r,我们无法判断它是在第一个区间还是在第二个区间里面。
因此我们只需要把r- -即可,即使把r去掉了,仍不会错过答案,因为mid=r。
其他情况同33题。
为啥只需判断mid和r的情况即可,如果其他地方存在重复不会影响吗?
不会,当我们判断好mid和r的关系之后,就确定了在哪一个区间里进行二分了
因此我们只需要正常二分即可,正常的二分是可以存在重复元素的。
完整的代码如下:

class Solution {
public:bool search(vector<int>& nums, int target) {int l = 0, r = nums.size() - 1;while(l<=r){int mid=(l+r)/2;if(nums[mid]==target){return true;}else if(nums[mid]==nums[r]){r--;continue;//说明有重复}else if(nums[mid]<nums[r]){if(target>nums[mid]&&target<=nums[r]){l=mid+1;}else{r=mid-1;}}else{if(target>=nums[l]&&target<nums[mid]){r=mid-1;}else{l=mid+1;}}}return false;}
};

时间复杂度平均是O(logn)
如果全是重复元素 O(n)
注意二分中ifelse的判断条件的先后顺序,先判断mid==target,这样不用考虑一些特殊情况。

http://www.dtcms.com/a/589176.html

相关文章:

  • WampServer安装教程(图文步骤)+ 下载+配置+解决图标红橙绿问题【附安装包】
  • 使用 dash 构建 mvvm 整洁架构应用
  • 跨时钟域处理
  • 2025制品管理工具选型,jfrog vs nexus vs hadess哪一款更好用?
  • 北京校园网站建设wordpress新建页面是
  • 【1.7】基于FPGA的costas环开发1——发射端信号产生模块
  • Postman 工具实现签名校验:完整操作指南与代码解析
  • AQS介绍
  • reshape的共享内存
  • 数据结构之,栈与队列
  • 【数据结构】基于哈夫曼树的数据压缩算法
  • SQLAlchemy2.0使用
  • 利用binlog2sql数据闪回实战
  • 东莞网站建设曼哈顿信科网站建设的总体设计概图
  • 算法:矩形区域不超过k的数值和
  • 算法30.0
  • 算法基础篇:(四)基础算法之前缀和
  • Nginx优化与防盗链
  • Vue-vuex 核心概念和 API
  • 分治归并算法第一弹
  • 【数据结构】哈夫曼树技术详解:原理、算法与应用
  • 贵阳网站备案在哪里网站红色
  • 个人网站公司网站区别经营区别数字货币怎么推广赚钱
  • 3GPP 各主要 Release(版本)及其发布时间和主要内容
  • RK3588同时硬解和GPU绘制16路1080P/通用其他RK系列板子/嵌入式监控系统/支持国产硬件和系统
  • BB ACS355变频器家装EMC电源滤波安装与使用指南
  • ARMV9.7 FEAT_SME2p3 视频编解码器新增指令扩展
  • 基础开发工具(下)
  • 一文详解分布式事务
  • HarmonyOS DataShareExtension深度解析:构建安全高效的数据共享架构