二分查找(二)

news/2024/5/6 0:06:19/文章来源:https://blog.csdn.net/jmqxnxg/article/details/129946221

2.练习题

3)

力扣icon-default.png?t=N2N8https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/这题需要分三种情况,第一种是区间有序,正常二分查找,第二种是区间 被旋转,左区间的值大于右区间,需要比较目标值和左区间起始值的大小,来判断选择哪一个区间,第三种是无法区分左区间大还是右区间大,此时[left]==[right],可以直接进行left++或者right--来跳过该值。

代码:

class Solution {
public:bool search(vector<int>& nums, int target) {int left = 0, right = nums.size()-1, mid;while(left<=right){mid = left + (right-left)/2;if(nums[mid]==target) return true;if(nums[left]<nums[right]){if(nums[mid]<target){left = mid + 1;}else{right = mid -1;}}else if(nums[left]>nums[right]){if(target>=nums[left]){   right--;}else{left++;}}else{left++;}}return false;}
};

4)力扣icon-default.png?t=N2N8https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/

这题与上一道题类似,也是分析旋转数组可能的情况,找出目标值。

我一开始的思路是继续对数组分类,有序,已旋转,无法区分三类,代码如下:

class Solution {
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size()-1, mid;while(left<right){mid = left + (right-left)/2;if(nums[left]<nums[right]){return nums[left];}if(nums[left]==nums[right]){right--;}else{if(nums[mid]==nums[left]){left++;}else if(nums[mid]>nums[left]){left = mid + 1;}else{left++;right = mid;}}}return nums[left];}
};

可以通过测试,就是代码看起来不够简洁,于是修改了一下,只比较中间值与结束值[right],代码如下:

class Solution {
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size()-1, mid;while(left<right){mid = left + (right-left)/2;if(nums[mid]==nums[right]){right--;}else if(nums[mid]>nums[right]){left = mid + 1;}else{right = mid;}}return nums[left];}
};

用时确实更短了

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何计算和提高客户生命周期价值 (LTV)

客户生命周期价值&#xff08;LTV或 CLV&#xff09;是衡量客户在其生命周期内为企业带来的总价值的关键指标。在电子商务中&#xff0c;LTV在决定企业的健康和成功方面起着至关重要的作用。LTV越高&#xff0c;业务的盈利能力和可持续性就越高。最常见的 LTV公式&#xff1a;L…

iphone distribution

未受信任的企业级开发者 通用 - VPN与设备管理 显示你下载的APP列表&#xff0c;点击进入 点击【信任xxxxx】

codeblocks20.3配置wxWidget3.2.2.1

codeblocks20.3 # 英文版自带gcc810&#xff0c;不汉化 wxWidget3.2.2.1 github下载源码 win11专业版 1.下载wxWidget3.2.2.1 源码 2.下载后解压到一个目录中&#xff0c;不要含中文和空格。我放在&#xff1a;d:\wxWidget3.2.2.1 3.打开终端cd build/msw 4.编译wxWidgets 为 …

多重背包问题 二进制优化 java 路径记录

多重背包---二进制拆分---java小知识_java多重背包问题_m78星云杰克的博客-CSDN博客 应该可以使用完全背包问题的记录路径的方法&#xff0c;例如&#xff0c;使用二维数组记录&#xff0c;记录当前硬币需要多少个

音视频骚操作,FFmpeg 如何播放带「图片」的 M3U8 视频,IJKPlyaer 适配非标 TS 文件

如果看到一个需要播放的视频链接显示是一张图片&#xff0c;你会不会感觉有点懵&#xff1f;如果这张图片写着 png&#xff0c;然后实际格式是 bmp &#xff0c;你会不会更懵了&#xff1f;如果这个 bmp 还做了加密篡改呢&#xff1f;今天我们要聊的就是这样一个充满骚操作的音…

css三角和css 用户见面样式,vertical-align 属性应用,溢出的文字省略号显示,常见布局技巧

目录 3.CSS三角 4.CSS 用户界面样式 4.1什么是界面样式 4.2轮廓线 outline 4.3 防止拖拽文本域 resize 5.vertical-align 属性 5.1图片,表单都属于行内块元素&#xff0c;默认的vertical-align 是基线对齐。 5.2解决图片底部默认空白缝隙问题 6.溢出的文字省略号显示 1.单…

linux centos7 查看端口占用命令netstat 报错提示 –bash:netstat:未找到命令解决方法

今天在一台centos7上用netstat命令看端口占用情况&#xff0c;提示 –bash:netstat:未找到命令&#xff1a; 解决方法&#xff1a; 输入 yum search ifconfig 查看这个命令是在 net-tools.x86_64里的&#xff1a; 然后安装这个包&#xff0c;输入 yum install net-tools 安装&…

ERTEC200P-2 PROFINET设备完全开发手册(2-1)

2. 入门指导&#xff1a;第一个PN IO设备 开发之前的准备&#xff0c;需要的软件&#xff1a; TIA Portal V16、V17串口终端软件 (MobaXterm或Putty或TeraTerm)Win10 并且安装64位JAVA运行环境J-Link的驱动软件Proneta&#xff08;推荐使用&#xff09; 需要准备的硬件 性能…

通信算法之130:软件无线电-接收机架构

1. 超外差式接收机 2.零中频接收机 3.数字中频接收机

洛谷B2033A*B问题

洛谷B2033 题目描述 输入两个正整数A 和B&#xff0c;求 AB 的值。注意乘积的范围和数据类型的选择。 输入格式 一行&#xff0c;包含两个正整数 A 和B&#xff0c;中间用单个空格隔开。1≤A,B≤50000。 输出格式 一个整数&#xff0c;即AB 的值 代码&#xff1a; #include&…

MySQL-双主高可用

目录 &#x1f341;拓扑环境 &#x1f341;配置两台MySQL主主同步 &#x1f343;修改MySQL配置文件 &#x1f343;配置主从关系 &#x1f343;测试主主同步 &#x1f341;keepalived高可用 &#x1f343;keepalived的安装配置 &#x1f343;master配置 &#x1f343;slave配置 …

Aurora 64B/66B 协议介绍

简介 Aurora 是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议。这为物理层提供透明接口&#xff0c;让专有协议或业界标准协议上层能方便地使用高速收发器。虽然使用的逻辑资源非常少&#xff0c;但 Aurora 能提供低延迟高带宽和高度可配置的特性集。 特性&…

凹凸/法线/移位贴图的区别

你是否在掌握 3D 资产纹理的道路上遇到过障碍&#xff1f; 不要难过&#xff01; 许多刚接触纹理或 3D 的艺术家在第一次遇到凹凸贴图&#xff08;Bump Map&#xff09;、法线贴图&#xff08;Normal Map&#xff09;和移位贴图&#xff08;Displacement Map&#xff09;时通常…

React class组件和hooks setState异步更新数据详解

一、 class组件setState详解 1.class组件setState异步更新数据详解 class Father extends React.Component{state {num:0}addHandler () > { this.setState({num: 100})console.log(state中的值,this.state.num)}render() { return (<div><button onClick{this…

DBC数据库中定义信号时采用的两种字节顺序:Intel、Motorola(深度好文)

我之前写过好几篇文章介绍大端小端的存储、显示和读取。在介绍DBC的文章中,也有信号在CAN消息数据中如何定义的顺序,它和大端小端采用的原理相同,但是不能带入数据大端小端存储的方法。这里千万要注意! DBC数据库中定义信号时采用的字节顺序,如果想讲明白,很简单。但是如…

「解析」Jetson 安装 CUDA/cuDNN

注意&#xff1a;自从JetPack 升级到 5.0版本之后&#xff0c;可以&#xff0c;JetPack 官方教程 官方教程提供了三种方法&#xff1a;SD卡、SDK Manager 以及 apt安装Jetpack。前两种主要用于Orin系列之前的 Jetson开发板&#xff0c;主要针对还没有烧录系统的空机。而从 Jets…

手机也可以3D沙发建模

3D沙发建模是当今室内设计领域中必不可少的一种技术。通过此技术&#xff0c;我们可以使用虚拟设计软件创建高质量的3D沙发模型。这些模型具有极高的精度和逼真度&#xff0c;可以帮助设计师更好地展示他们的创意&#xff0c;并有效地促进设计过程。 在进行3D沙发建模时&#…

洛谷B2038奇偶ASCII值判断

洛谷B2038 题目描述 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES&#xff0c;否则&#xff0c;输出 NO 。 例如&#xff0c;字符 A 的 ASCII 值是 65&#xff0c;则输出 YES&#xff0c;若输入字符 B(ASCII 值是 66)&#xff0…

shell脚本基础之详解结构化命令(一)

详解结构化命令使用if-then语句注意&#xff1a;if-then-else语句嵌套if语句elif语句注意&#xff1a;test语句注意&#xff1a;数值比较字符串比较字符串相等性字符串顺序字符串大小文件比较检查目录检查对象是否存在检查文件检查是否可读检查非空文件复合条件测试if-then高级…

怎么选购邮件营销工具?

据可靠数据统计&#xff0c;邮件营销得投资回报比达1&#xff1a;44&#xff0c;他高性价比的特性在众多营销方式中脱颖而出。他促使企业能够以较低的成本&#xff0c;和客户建立联系并维持长期联系。邮件营销对企业来讲无疑是极佳的获客渠道和营销方式。 想要做好邮件营销通常…