力扣(LeetCode)81. 搜索旋转排序数组 II(C++)

news2025/7/19 16:52:32

线性探测+二分查找

本题和 力扣(LeetCode)33. 搜索旋转排序数组(C++) 的唯一区别是有重复元素,思考我们之前的二分条件,是根据 n u m s [ 0 ] nums[0] nums[0] n u m s [ m i d ] nums[mid] nums[mid] 判断 m i d mid mid 哪一端有序,但是现在可能出现 n u m s [ 0 ] = n u m s [ m i d ] = n u m s [ r ] nums[0]=nums[mid] =nums[r] nums[0]=nums[mid]=nums[r] ,再按照 n u m s [ m i d ] nums[mid] nums[mid] n u m s [ 0 ] nums[0] nums[0] 判断有序,已经不成立了。考虑去除 n u m s nums nums 末尾等于 n u m s [ 0 ] nums[0] nums[0] 的数,避免特例,这样就可以按照 33 33 33 题那样二分了。

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        int r = nums.size()-1;
        while(r>=0&&nums[0]==nums[r]) r--;
        if(r<0) return nums[0]==target;
        int l = 0;
        while(l<=r){
            int mid = l+((r-l)>>1);
            if(nums[0]<=nums[mid]){//左端有序
                if(target>=nums[0]&&nums[mid]>=target) r = mid -1;
                else l = mid + 1;
            }else{
                if(target<nums[0]&&nums[mid]<target) l = mid + 1;
                else r = mid - 1;
            }
        }
        if(nums.size()==l) return false;
        return nums[l]==target;
    }
};

时间复杂度 O ( n ) O(n) O(n) ,线性探测的最坏时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( 1 ) O(1) O(1) ,只用到常量级空间 。

致语

理解思路很重要。
欢迎读者在评论区留言,答主看到就会回复的。

AC

AC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Metabase学习教程:视图-7

创建数据透视表 了解如何使用Metabase中的不同数据库创建透视表。 什么是透视表&#xff1f;数据透视表是一种汇总和分组数据的表格方式。它们是分析师工具箱中的一个有价值的工具&#xff0c;因为它们是展示和重新安排大量信息的有效方法。它们的工作原理如下&#xff1a; …

中华传统文化题材网页设计主题:基于HTML+CSS设计放飞青春梦想网页【学生网页设计作业源码】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

应用ceph块存储(ceph-13.2.10)

记录&#xff1a;334 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;部署ceph-13.2.10集群。应用ceph块设备(ceph block device)&#xff1b;主要是创建ceph块存储、块存储分区、在线扩容、离线缩容、删除块存储等操作。 版本&#xff1a; 操作系统&#xff1a;CentOS…

gateway网关转发请求到nacos不同namespace和不同group下服务实例源码改造

问题 gateway转发请求到微服务&#xff0c;报错误页面&#xff0c;错误信息如下所示: There was an unexpected error (typeService Unavailable, status503). Unable to find instance xxx 报错信息显示找不到应用实例。即gateway无法在nacos实例中获取到路由配置的对应实例…

2021 XV6 5:Copy-on-Write Fork

目录 1.概述 2.修改uvmcopy 3.修改trap.c 4.引用计数机制 5.修改copyout 6.结果 1.概述 首先&#xff0c;这是一个很有意义的性能优化方案。 提出的背景是&#xff0c;如果我们每次fork的时候&#xff0c;都完整分配一系列物理页把父进程的内容拷贝进来&#xff0c;是一…

【SpringBoot】定制⾃⼰的 Health Indicator

Spring Boot ⾃带的 Health Indicator ⽬的 检查应⽤程序的运⾏状态 状态 DOWN - 503OUT_OF_SERVICE - 503UP - 200UNKNOWN - 200 机制 通过 HealthIndicatorRegistry 收集信息HealthIndicator 实现具体检查逻辑 配置项 management.health.defaults.enabledtrue|falsem…

【学习笔记】Reids的哨兵机制

【学习笔记】Reids的哨兵机制 文章目录【学习笔记】Reids的哨兵机制前言什么是哨兵机制&#xff1f;如何判断主库是否挂掉&#xff1f;主从库的切换和消息的通知前言 什么是哨兵机制&#xff1f; 哨兵机制&#xff08;sentinel&#xff09; 是Redis解决高可用的一种解决方案&a…

视频会议解决方案-最新全套文件

视频会议解决方案-最新全套文件一、建设背景二、建设思路业务挑战三、建设方案四、获取 - 视频会议全套最新解决方案合集一、建设背景 随着中国经济的迅速发展&#xff0c;很多企业的发展也进入快车道&#xff0c;分支机构越来越多&#xff0c;形成了遍布全国范围甚至全球范围…

Echarts:惊艳的Map

大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度&#xff0c;并根据温度的高低显示不同的颜色&#xff0c;又或者看到各个省份的新冠肺炎新增人数&#xff0c;根据不同的新增人数显示不同的颜色之类的图像。这些&#xff0c;使用echarts中的map就可以实…

python实现灰色关联法(GRA)

原文&#xff1a;https://mp.weixin.qq.com/s/Uuri-FqRWk3V5CH7XrjArg 1 灰色关联分析法简介 白色系统是指信息完全明确的系统&#xff0c;黑色系统是指信息不完全明确的系统&#xff0c;而灰色系统是介于白色与黑色系统之间的系统&#xff0c;是指系统内部信息和特征是部分已…

IDEA设置和相关快捷键记录汇总

IDEA设置和相关快捷键 前言 Java 开发 现在基本都是使用 IDEA 作为开发工具&#xff0c;IDEA 有很多设置和常用的快捷键&#xff0c;熟悉之后能更好的提高开发效率&#xff0c;这里总结了下从慕课网的内容 开发工具IDEA从入门到爱不释手-慕课网 (imooc.com)&#xff0c;摘录做…

Kafka - 04 Java客户端实现消息发送和订阅

1. Kafka测试命令行操作 1. 主题命令行操作 在上一节中我们安装了Kafka单机环境和集群环境&#xff0c;这一节来测试下Linux环境安装Kafka后的命令行操作。 我们之前在用Windows环境安装Kafka Kafka应用场景|基础架构|Windows安装|命令行操作 和命令行操作时&#xff0c;讲到…

哪种类型的蓝牙耳机好?超高性价比蓝牙耳机推荐

朋友让我推荐蓝牙耳机的时候&#xff0c;总是喜欢问哪款蓝牙耳机的性能更强&#xff0c;想要直接入手那款性能更强的蓝牙耳机&#xff0c;以此节省对比的时间。但是用户自行进行对比的步骤&#xff0c;显然是不能省的&#xff0c;所以推荐这四款高性价比的蓝牙耳机&#xff0c;…

华为云桌面Workspace,让你的办公更加舒适惬意

在各行各业转型的过程中&#xff0c;企业对于线上办公的需求不断增多&#xff0c;越来越需要一个云办公平台&#xff0c;为企业更好实现数字化网络化办公降本增效。正逢佳节之际&#xff0c;在此为各大企业推荐一个高效的办公神器——华为云桌面Workspace。相信作为企业决策者的…

详解设计模式:抽象工厂模式

工厂方法模式&#xff0c;又称工厂模式、多态工厂模式和虚拟构造器模式&#xff0c;通过工厂父类定义负责创建产品的公共接口&#xff0c;子类负责生产具体对象。可以理解为简单工程模式的升级&#xff0c;解决简单工厂模式的弊端。 &#xff5e; 本篇内容包括&#xff1a;关于…

Executors-四种创建线程的手段

1 Executors.newCachedThreadPool() 从构造方法可以看出&#xff0c;它创建了一个可缓存的线程池。当有新的任务提交时&#xff0c;有空闲线程则直接处理任务&#xff0c;没有空闲线程则创建新的线程处理任务&#xff0c;队列中不储存任务。线程池不对线程池大小做限制&#x…

ESP三相SVPWM控制器的simulink仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB程序 1.算法描述 SVPWM则以三相的合成矢量为出发点&#xff0c;其基本思想为&#xff1a;在数学意义上的abc轴也好&#xff0c;αβ轴也好&#xff0c;其产生的电压都应该等于dq轴合成的那个电压。那么只要让…

swiper在动态创建dom过程中的问题:数据从后端请求回来后加载到页面上,dom加载完发现swiper没用了

怎么动态创建div标签&#xff1a; 要轮播的数据是后端返回的&#xff0c;所以我们要发ajax请求接收数据&#xff1b; 下面演示的是已经接收回来的数据&#xff0c;动态创建div标签&#xff1a; setTimeout(()>{var list ["aaa","bbb","ccc&quo…

【Redis】从计算机组成原理开始讲解为什么会出现Redis

文章目录前置知识数据库的出现Redismemcache与redis的区别前置知识 首先需要知道的一个常识就是&#xff1a;数据是存放在磁盘里面的。 而磁盘有两个指标&#xff1a; 寻址&#xff1a;表示找到对应的数据所需要的时间&#xff0c;ms带宽&#xff1a;表示单位时间可以有多少个…

Python排序:冒泡排序,选择排序,插入排序,希尔排序

编程中的交换元素逻辑&#xff1a; # python中交换元素 有内置的三方底层逻辑 可以直接交换 a 2 b 3 a, b b, a print(a) # a为3# 其他编程需要有一个中间的变量来转换 变量设为temp a 2 b 3 temp a a b b temp print(a) # a为3 -----冒泡排序----- 相邻…