二分查找算法

文章目录

  • 二分查找
  • 二分的实战+讲解
    • 二分查找
      • 普通二分模版
    • 在排序数组中查找元素的第一个和最后一个位置
      • 万能二分模版
  • 总结

二分查找

什么是二分查找:就是定义左右2个指针(此指针非真指针)取中间值
通过一次次取中间值找到要找到的数

二分的实战+讲解

二分查找

题目:地址

题目解析:
在这里插入图片描述

找到一个等于target的值
并返回他的下标
题目中给的数组是升序的

题目讲解
在这里插入图片描述
这样就能找到要找的目标值
如果没有找到那么就可以返回-1

代码:

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0,right =nums.size()-1,sum = 0;while(left<=right){sum = left+(right-left+1)/2;//这里的+1要不要无所谓在这个题if(nums[sum]<target){left=sum+1;}else if (nums[sum]>target){right = sum-1;}else{return sum;}}return -1;}
};

普通二分模版

在这里插入图片描述

在排序数组中查找元素的第一个和最后一个位置

题目:地址

题目解析:
在这里插入图片描述
找到等于target的第一个下标和最后一个下标
并且返回
数组是升序的

题目讲解
在这里插入图片描述

代码:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size()==0){return {-1,-1};}int left=0,right=nums.size()-1;int mid = 0;int begin = 0,end = 0;while(left<right)//找左端点//不能写等于//因为写了等于会死循环//right位置不改变//mid位置会永远不动{//这里的不能写成right-left+1的形式//如果写了会出现死循环//同样的 right位置不改变//mid也不会动 进而死循环mid = left+(right-left)/2;if(nums[mid]>=target){right=mid;}else{left=mid+1;}}if(nums[left]==target){begin=left;}else{return {-1,-1};}right=nums.size()-1;while(left<right){//这里的不能写成right-left的形式//如果写了会出现死循环//同样的 left位置不改变//mid也不会动 进而死循环mid = left+(right-left+1)/2;if(nums[mid]>target){right=mid-1;}else{left=mid;}}end = right;return {begin,end};}
};

万能二分模版

在这里插入图片描述

总结

二分的模版很简单
但是不能死记硬背
要理解里面为什么这样子二分
死记硬背改了一种形式也不一定你能看出是二分
最后喜欢的点点赞
可能这也不是最优的优化,但是我能做出来现阶段最好的了。

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

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

相关文章

ELK技术栈介绍及简单使用实例

1. ELK技术栈介绍 引言 在当今数据驱动的世界里&#xff0c;有效地管理和分析大量日志数据变得至关重要。这里我们将深入探讨ELK技术栈&#xff0c;这是一种流行的日志管理解决方案&#xff0c;它结合了三个开源项目&#xff1a;Elasticsearch、Logstash和Kibana。ELK技术栈因…

测试文档---智力冲刺

文章目录 项目背景测试计划UI测试接口测试手工测试 测试总结 项目背景 项目描述&#xff1a;“智力冲刺”是一款网页小游戏&#xff0c;就像我们平时看到的网页游戏一样&#xff0c;前端页面负责展示游戏效果&#xff0c;后端服务器来实现游戏的逻辑。在我们的“智力冲刺”游戏…

YOLOv7 学习笔记

文章目录 前言一、YOLOv7贡献和改进二、YOLOv7核心概念三、YOLOv7架构改进总结 前言 在深度学习和计算机视觉领域&#xff0c;目标检测一直是一个极具挑战性和实用性的研究领域。特别是在实时目标检测方面&#xff0c;准确率和速度之间的平衡成为了关键考量因素。YOLO&#xf…

C语言精选——选择题Day40

第一题 1. int a[10] {2,3,5}, 请问a[3]及a[3]之后的数值是&#xff08;&#xff09; A&#xff1a;不确定的数据 B&#xff1a;5 C&#xff1a;0 D&#xff1a;0xf f f f f f f f 答案及解析 C 数组的不完全初始化&#xff0c;会自动把没初始化的部分初始化为0&#xff1b; 第…

postman做接口自动化测试

接口是用来连接服务端和客户端&#xff0c;一般返回的数据都是json。 get和post请求的区别&#xff1a; 1. get请求比post请求安全 2. get请求参数有长度限制&#xff0c;post请求没有 3. get请求没有body&#xff0c;参数都是放在url里面&#xff0c;而post请求是放在body…

大华DSS S2-045 OGNL表达式注入漏洞复现

0x01 产品简介 大华DSS安防监控系统平台是一款集视频、报警、存储、管理于一体的综合安防解决方案。该平台支持多种接入方式,包括网络视频、模拟视频、数字视频、IP电话、对讲机等。此外,该平台还支持多种报警方式,包括移动侦测、区域入侵、越线报警、人员聚集等。 0x02 漏…

元宇宙:重塑游戏行业体验下一个前沿

游戏行业在其整个历史中经历了显著的转变&#xff0c;从超级马里奥的像素化冒险发展到Red Dead Redemption等游戏中迷人的开放世界体验。随着时间的推移&#xff0c;游戏不断突破数字领域所能达到的极限。然而&#xff0c;被称为元宇宙的突破性演变将彻底改变游戏行业&#xff…

PO模式在selenium自动化测试框架有什么好处

PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式&#xff0c;使用这种模式后&#xff0c;可以有效的提升代码的复用能力&#xff0c;并且让自动化测试代码维护起来更加方便。 PO模式的全称叫page object model&#xff08;POM&#xff09;&#xff0c;有时候叫做 p…

网工内推 | 外企、合资公司急招网工,国内外旅游,健身年卡

01 深圳市耐施菲信息科技有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责项目的计划、实施、过程管控、项目验收等工作&#xff1b; 2、负责大型项目设备实施、安装调试等售后维护工作&#xff1b; 3、分析、设计网络拓扑结构、配置H3C、华为等交换机…

SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则

SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段&#xff08;或字段集合&#xff09;&#xff0c;它引用另一张表中的主键。具有外键的表称为子表&#xff0c;具有主键的表称为被引用表或父表。 以下是两个表的例子&a…

dll动态链接库【C#】

1说明&#xff1a; 在C#中&#xff0c;dll是添加 【类库】生成的。 2添加C#的dll&#xff1a; &#xff08;1&#xff09;在VS中新建一个Windows应用程序项目&#xff0c;并命名为TransferDll。 &#xff08;2&#xff09;打开Windows窗体设计器&#xff0c;从工具箱中为窗体…

Unity 性能优化的手段【更新中】

目录 对象池 减少Draw Calls 批处理 合并网格 贴图集 LOD 基本原理 应用 优点 挑战 LightMap 基本概念 如何工作 优点 缺点 对象池 使用对象池&#xff1a;频繁地创建和销毁对象会导致性能下降和内存碎片化。对象池可以预先创建一些对象&#xff0c;然后在需要时…

【数据开发】Hive 多表join中的条件过滤与指定分区

1、条件过滤 left join 中 on 后面加条件 where 和 and 的区别 1、 on条件是在生成临时表时使用的条件&#xff0c;它不管and中的条件是否为真&#xff0c;都会保留左边表中的全部记录。2、where条件是在临时表生成好后&#xff0c;再对临时表进行过滤的条件。这时已经没有le…

Gemini:新一代AI产品的惊人功能和革命性影响

目录 1 前言2 视频分析与交互能力3 策划推理能力4 教育领域的应用能力5 科学领域的论文解读能力6 结语 1 前言 Google最新推出的AI产品Gemini引发了广泛关注&#xff0c;其30分钟的介绍和演示视频展示了令人惊艳的功能。Gemini以其惊人的艺术创作能力脱颖而出&#xff0c;通过…

TCP一对一聊天

客户端 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io…

python-04(入门基础篇4——lists相关的部分语法)

python-04&#xff08;入门基础篇4——lists相关的部分语法&#xff09; 1. 前言1.1 python入门1.2 参考官网 2. 关于索引和切片3. 在列表追加元素3.1 支持拼接3.2 使用list.append() 方法在列表末尾添加新项 4. 列表是可变类型4.1 更改其中某元素内容4.2 使用切片更改列表大小…

cesium学习记录

有段时间自学了cesium&#xff0c;这里记录一下自学过程&#xff0c;希望在所需之时查阅~~ 1、cesium源码获取与Index页面介绍 官网网址 www.cesiumjs.org 源代码下载&#xff1a;Platform-Dowmloads 在index.html右击open with Live server开启本地服务 点击Documentation…

mysql 表分区类型

在MySQL中&#xff0c;有几种不同类型的分区可以用于对表进行分区。以下是MySQL中常用的分区类型&#xff1a; 1. RANGE分区&#xff1a;基于给定的列范围进行分区。例如&#xff0c;可以按照日期范围或数值范围对表进行分区。 CREATE TABLE sales (id INT NOT NULL AUTO_INC…

VMware安装OpenEuler(安装界面)

本文中使用的OpenEuler版本&#xff1a;22.03 LTS SP2 VMware&#xff1a;17.0.0 一、下载镜像 根据CPU和场景&#xff0c;按需下载 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系统 四、安装操作系统 …

Nginx漏洞修复

1、漏洞 去掉在请求响应头中存在的信息 Server: nginx X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1;modeblock 修复方法 在Nginx的配置文件中的 server 标签内增加一下配置 server_tokens off; add_header X-Frame-Options SAMEORIGIN; …