【LeedCode】二分查找算法(一)

二分查找算法的时间复杂度是O(logN) ,更优于传统的遍历数组算法值得我们学习。

注意二分查找一般使用的前提是:待操作的数组的元素有某种规律也就是要有二阶性,二段性就是在数组中选取一点根据该数组元素某种规律可以把数组分为两部分,可以舍弃一部分然后在剩下的部分找出结果。

简单二分查找算法

解法一:遍历数组,时间复杂度O(n)。

解法二:二分查找,时间复杂度O(logN)。

该题数组元素是升序,因此该数组具有二段性。可以使用二分查找算法。

二分查找得到target下标的情况  :

1.取middle时直接取到target  

2.当left == right时,可能会取到target的下标     left == right是找到target的最后机会,如果a[left] != target则查找失败。

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while (left <= right){int mid = left + (right - left) / 2;//防止数据溢出if (nums[mid] < target)left = mid + 1;else if (nums[mid] > target)right = mid - 1;elsereturn mid;}return -1;}
};

进阶二分查找算法

该数组的元素是非递减序的,也就是说元素是以增大或不变的顺序排序的,因此待操作数组具有二段性。

目标值的开始位置和结束位置要分开来找。

求目标值的开始位置:

选取mid(二分查找过程中选取的中点下标):mid = left + (right - left) / 2

二分查找循环条件:left < right

求目标值的结束位置:

mid = left + (right - left + 1) / 2

二分查找循环条件:left < right

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {//处理数组元素为0的情况if (0 == nums.size())return { -1,-1 };int begin = 0;//1.求目标值的开始位置int left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (nums[mid < target])left = mid - 1;elseright = mid;}//判断是否有结果if (nums[left] != target)return { -1,-1 };else begin = left;//2.求目标值的结束位置left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left + 1) / 2;if (nums[mid] <= target)left = mid;elseright = mid - 1;}return { begin,right };}
};

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

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

相关文章

国企:2024年6月中国移动相关招聘信息 三

中国移动卓望公司-卓望信息 卓望公司成立于2000年6月,是中国移动的控股子公司,积极拓展互联网、IT、ICT领域,提供平台及应用开发、运营运维等服务。  成立二十余年来,卓望公司逐渐形成包括业务合作管理、内容渠道运营、网络集中运维、企业服务、安全服务、行业DICT服务等…

笔记-python的with用法

一、With语句是什么&#xff1f; 在编程中&#xff0c;有些任务需要在执行前进行设置&#xff0c;并在完成后进行清理。针对这种情况&#xff0c;Python的with语句提供了一种非常方便的处理方式。一个典型的例子是文件处理&#xff1a;需要打开一个文件句柄&#xff0c;从中读…

LDR6500U,让设备爱上“被骗”的充电速度!

在数字设备日新月异的今天&#xff0c;兼容性和充电效率已成为用户关注的核心焦点。尤其是随着电子设备市场的全球化发展&#xff0c;标准化的需求日益凸显。近期&#xff0c;欧洲联盟&#xff08;简称“欧盟”&#xff09;就电子设备充电接口问题做出了重要决策&#xff0c;要…

高校新生如何选择最优手机流量卡?

一年一度的高考已经结束了&#xff0c;愿广大学子金榜题名&#xff0c;家长们都给孩子准备好了手机&#xff0c;那么手机流量卡应该如何选择呢&#xff1f; 高校新生在选择手机流量卡时&#xff0c;需要综合考量流量套餐、费用、网络覆盖、售后服务等多方面因素&#xff0c;以下…

办理河南建筑工程乙级设计资质的流程与要点

办理河南建筑工程乙级设计资质的流程与要点 办理河南建筑工程乙级设计资质的流程与要点主要包括以下几个方面&#xff1a; 流程&#xff1a; 工商注册与资质规划&#xff1a;确保企业具有独立法人资格&#xff0c;完成工商注册&#xff0c;并明确乙级设计资质的具体要求&…

Java开发-实际工作经验和技巧-0001-PostgreSQL数据库存储磁盘满了重启以及应急措施

Java开发-实际工作经验和技巧-0001-PostgreSQL数据库存储磁盘满了重启以及应急措施 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff0…

【Unity Shader】片段着色器(Fragment Shader)的概念及其使用方法

在Unity和图形编程中&#xff0c;片段着色器&#xff08;Fragment Shader&#xff09;是渲染管线中的一个阶段&#xff0c;负责计算屏幕上每个像素&#xff08;片段&#xff09;的颜色和特性。片段着色器通常在顶点着色器和任何几何处理之后运行&#xff0c;是决定最终像素颜色…

用于射频功率应用的氮化铝电阻元件

EAK推出了新的厚膜氮化铝 &#xff08;AlN&#xff09; 电阻器和端接系列&#xff0c;以补充公司现有的产品。传统上&#xff0c;射频功率电阻元件采用氧化铍&#xff08;BeO&#xff09;陶瓷材料作为陶瓷基板;然而&#xff0c;由于国际上要求从产品中去除BeO的压力&#xff0c…

[HBM] HBM 国产进程, 国产HBM首次研发成功 (202406)

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 AI 的火热浪潮带火了高带宽内存的需求&#xff0c;HBM已是存储市场耀眼的明星。目前市场上还没有国产HBM, 什么时候可以看到国产希望呢&#xff1f; 或许现在可以看到曙光了。 1. 设计端 1…

免费内网穿透工具 ,快解析内网穿透解决方案

在IPv4公网IP严重不足的环境下&#xff0c;内网穿透技术越来越多的被人们所使用&#xff0c;使用内网穿透技术的好处有很多。 1&#xff1a;无需公网ip 物以稀为贵&#xff0c;由于可用的公网IP地址越来越少&#xff0c;价格也是水涨船高&#xff0c;一个固定公网IP一年的成本…

全面讲解数字化采购:整体技术架构与最佳实践

在全球化和数字化浪潮的推动下&#xff0c;企业的采购流程正经历深刻变革。数字化采购通过引入先进的信息技术&#xff0c;优化供应链管理&#xff0c;提高采购效率&#xff0c;降低成本。本文将详细介绍数字化采购的整体技术架构&#xff0c;并分享最佳实践经验&#xff0c;帮…

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来&#xff0c…

JupyterLab使用指南(十): JupyterLab安全性与配置教程

文章目录 1. 生成详细的配置2. 安全策略2.1 使用 HTTPS 加密通信2.2 设置访问密码2.3 禁用 root 用户启动3. 修改配置文件4. 将 JupyterLab 作为后台进程运行4.1 使用 `nohup`4.2 使用 `systemd`1. 生成详细的配置 JupyterLab 的配置文件用于管理和定制 JupyterLab 的各种行为…

构建、标记和发布镜像

构建、标记和发布镜像 目录 构建镜像标记镜像发布镜像实践 设置构建镜像推送镜像 在本指南中&#xff0c;您将学习以下内容&#xff1a; 构建镜像&#xff1a;基于Dockerfile构建镜像的过程。标记镜像&#xff1a;为镜像命名的过程&#xff0c;这也决定了镜像的分发位置。发…

【TensorFlow深度学习】探讨未来深度学习与TensorFlow的发展趋势

探讨未来深度学习与TensorFlow的发展趋势 探讨未来深度学习与TensorFlow的发展趋势:塑造智能世界的科技前沿1. 深度学习技术的未来展望1.1 更强的模型可解释性1.2 高效的轻量化模型1.3 强化学习与自监督学习的融合2. TensorFlow的未来发展趋势2.1 更广泛的生态系统整合2.2 量子…

Jenkins nginx自动化构建前端vue项目

在现代的Web开发中&#xff0c;Vue.js已经成为一种非常流行的JavaScript框架。为了更高效地管理和部署Vue.js项目&#xff0c;使用自动化构建工具是至关重要的。Jenkins作为一款强大的持续集成和持续部署&#xff08;CI/CD&#xff09;工具&#xff0c;为我们提供了一种便捷的方…

海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow

一、介绍 海洋生物识别系统。以Python作为主要编程语言&#xff0c;通过TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对22种常见的海洋生物&#xff08;‘蛤蜊’, ‘珊瑚’, ‘螃蟹’, ‘海豚’, ‘鳗鱼’, ‘水母’, ‘龙虾’, ‘海蛞蝓’, ‘章鱼’, ‘水獭’, …

Apple - Media Playback Programming Guide

本文翻译整理自&#xff1a;Media Playback Programming Guide&#xff08;Updated: 2018-01-16 https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/Introduction/Introduction.html#//apple_…

【office技巧】如何合并pdf并且添加目录页

所用工具&#xff1a;wps&#xff0c;acrobat reader 1.制作目录页 在wps里设置一级标题&#xff0c;二级标题&#xff0c;然后自动生成目录页&#xff0c;保存为pdf。 在acrobat reader里删除除了目录页之外的其他页面。 2.pdf合并 在acrobat reader里合并pdf。 注意有可能…

嵌入式项目开发中的需求开发控制流程

嵌入式项目的需求开发控制流程包括多个步骤&#xff0c;以确保项目能够按时、高质量地交付。以下是一个典型的嵌入式项目需求开发控制流程&#xff1a; 1. 项目启动 项目启动是项目的初始阶段&#xff0c;主要包括以下内容&#xff1a; 项目立项&#xff1a;确认项目的可行性…