【刷题日记】8.二分查找

news/2024/4/30 10:50:14/文章来源:https://blog.csdn.net/m0_62179366/article/details/126974148

目录

题目链接:704. 二分查找 - 力扣(LeetCode)

一、题目介绍

二、思路

左闭右闭区间写法

三、代码

总结


题目链接:704. 二分查找 - 力扣(LeetCode)


一、题目介绍

这道题就是基本的二分查找,找到返回元素下标,没有找到返回-1

很多人都会对这道题不屑一顾,但是小小的二分也有很多的讲究

二分查找的时间复杂度为O(logN)

不过要记住二分查找的条件是数组已经排好序了,并且数组中元素没有重复

二、思路

二分查找主要分为两种,一种是左闭右闭区间[left, right],另一种是左闭右开区间[left, right)

这两种不同的区间划分方式,决定了循环的条件

我们在写二分查找时很多人都会分不清到底是left < right还是left <= right?

小于还是小于等于,取决于区间的划分

左闭右闭区间写法

左闭右闭区间所对应的循环条件是left <= right

很多人会问为什么?

我们可以画图来观察

我们可以观察到如果要遍历完整个数组,在左闭右闭的情况下需要我们让left <= right

接下来我们就要计算下标的中间值mid

mid = (left + right) / 2;

这种方式看似没有问题实际上可能会出现整型溢出的情况

所以我们最好这样写mid = left + (right - left) / 2;

我们以升序数组为例

如果nums[mid]比target大,证明target在[left, mid]这个区间中

这里也有一个易错点很多人会将right = mid这是错误的

这样赋值会造成死循环

正确的写法应该是right = mid - 1;

因为我们已经证明了nums[mid]比target还要大,所以target至少是从mid - 1开始取值

如果nums[mid] < target  left = mid + 1;

如果等于就直接返回,如果没有找到就返回-1;

三、代码

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


总结


以上就是今天要讲的内容,本文仅仅简单介绍了二分查找的基本思想,而这只是二分查找的冰山一角

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

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

相关文章

JavaScript面向对象

一、面向过程和面向对象 1、两大编程思想&#xff1a;面向过程和面向对象 面向过程编程&#xff08;OPP&#xff09; 装修房屋的流程&#xff1a; ​ 1.找张三设计&#xff0c;你要给张三提供房屋结构图纸 ​ 2.找李四安装水电&#xff0c;你要给李四买好水管电线 ​ 3.找…

室友打了一把王者我学会了CMake的使用(初学者必备)

CMakeCMake介绍CMake安装以及简单的使用利用CMake生成动静态库链接动静态库CMake介绍 CMake是开源、跨平台的构建工具&#xff0c;可以让我们通过编写简单的配置文件去生成本地的Makefile&#xff0c;这个配置文件是独立于运行平台和编译器的&#xff0c;这样就不用亲自去编写…

web协议-接口测试-Python自动化面试题

1、http和https的区别 http是超文本传输协议&#xff0c;端口是80 https是由SSLhttp协议构成&#xff08;https多了个加密协议&#xff0c;比http更安全&#xff09;&#xff0c;端口是443 2、TCP和UDP的区别 两者都属于传输层协议 TCP是面向连接的&#xff0c;建立TCP需要三…

Mysql主从切换流程

Mysql主从切换流程1.Mysql 版本2.场景3.环境4.切换步骤4.1 切断应用对主库的流量4.2 主库备库设置只读4.3 查看备库复制进程状态4.4 比对主备两边的GTID是否一致4.5 确认是否真正同完4.6 从库停掉复制进程并清空主从信息4.7 从库关闭只读开启读写&#xff0c;转为新主库4.8 主库…

在线反馈,急速解决,移动云视频客服让沟通从此不设限

对于产品而言&#xff0c;用户体验至关重要&#xff0c;而客服的服务质量就是用户体验的“灵魂”。随着移动云多达230全栈产品在云计算市场中的热卖&#xff0c;人们在使用产品中难免也会产生诸多问题&#xff0c;考虑到消费者在与客服沟通时打字描述太繁琐&#xff0c;在线沟通…

九零后程序员心塞:“30岁,月薪还没过万,是我的问题吗”

2020年有职场专家指出&#xff1a; 四千元的月薪&#xff0c;在国内算是中等的薪资水平。 每个月能赚到四千块&#xff0c;就打败了一半的国人&#xff1b; 如果每个月能赚8000~10000&#xff0c;那你就能跑赢90%的国人。 这几个数字是怎么得出来的&#xff1f; 我们可以从两…

上次没砍我的,这次我又来了;看完这篇还不明白 Binder 你砍我

最近一段时间由于工作&#xff0c;接触到 Framework 部分比较多一点&#xff0c;也难免要和 Binder 打一些交道&#xff0c; 因为在 Android 系统中&#xff0c;每一个应用程序都是由一些 Activity 和 Service 组成的&#xff0c;这些 Activity 和 Service 有可能运行在同一个进…

java基于springboot+vue的旅游心得分享攻略系统 elementui

SpringBoot是当前最流向的一个框架&#xff0c;它的配置更加的简单&#xff0c;使开发变得更加的简单迅速。 Spring Boot 的基础结构共三个文件&#xff0c;具体如下&#xff1a; src/main/java&#xff1a;程序开发以及主程序入口&#xff1b; src/main/resources&#xff1a;…

vue serve及其与vue-cli-service serve之间的关系

vue serve及其与vue-cli-service serve之间的关系 目录 vue serve及其与vue-cli-service serve之间的关系 一、前言 二、vue命令 三、package.json的preset预置的配置命令参数 3.1、依赖与开发依赖 3.2、vue/cli-service 的内部 3.3、vue -***命令如何跑起来 四、vue …

HTML篇三——(2)

目录一、HTML常用标签1.5 文本格式化标签1.6 <div> 和<span>标签一、HTML常用标签 标题标签、段落标签、换行标签见&#xff1a;https://editor.csdn.net/md/?articleId126970642 1.5 文本格式化标签 文本格式化标签是为文字设置粗体、斜体以及下划线等效果&am…

有了这个 Python 库,以后再也不用写正则表达式了

正则表达式大家应该有了解过吧&#xff1f;它功能很强大&#xff0c;但有一个痛点就是不太容易读写&#xff0c;我们需要了解正则的很多语法规则才能写出一个健壮的正则表达式&#xff0c;很多朋友估计听到正则表达式估计都焦头烂额了。 就没有解决办法吗&#xff1f; 有的&a…

单播以及多播的书写实验

实验目的&#xff1a; 学习对每个分类单播的理解以及书写 学习对每个分类多播的理解以及书写 实验说明&#xff1a; 通过此实验练习&#xff0c;可以更好的掌握IPv6地址书写以及分类 实验环境&#xff1a; 两台支持SPSERVICES的IOS的路由器 直通线以及串口线 实…

树莓派高级开发之树莓派博通BCM2835芯片手册导读与及“相关IO口驱动代码的编写”

首先我们要知道&#xff0c;驱动的两大利器&#xff1a;电路图&#xff08;通过电路图去寻找寄存器&#xff09;和芯片手册 一、寄存器的介绍 芯片手册第六章的89页&#xff0c;GPIO有41个寄存器&#xff0c;所有访问都是32位的。Description是寄存器的功能描述。GPFSEL0&…

2022年最新《Java八股文面试宝典》全网独一份!(效率最高、知识最新、包含各个技术栈)

今天在脉脉刷到了这么一条消息&#xff0c;现在这个大环境&#xff0c;都后悔学Java了&#xff0c;想转行学前端&#xff0c; 看完很是震惊&#xff0c;据大数据统计&#xff0c;Java的待遇是要好过前端的。小伙伴竟然被卷到想要转行......但是行情这个东西&#xff0c;也不是我…

vue3.x之isRef toRefs isRef readonly 公共数据配置 axios配置 路由配置

isRef toRefs toRef 参数&#xff1a; (源对象 , 源对象属性) 可以用来为源响应式对象上的某个 property 新创建一个 ref。然后&#xff0c;ref 可以被传递&#xff0c;它会保持对其源 property 的响应式连接。 也就是说源响应式对象(toRef的第一个参数) 上的某个 property…

【3D视觉】PointNet解析

您好&#xff0c;各位&#xff01;今天就基于3D点云数据的分类以及分割模型 : PointNet与PointNet做一个简单的解析&#xff0c;解析部分将结合论文与代码&#xff0c;加上一些我个人微不足道&#xff08;也不一定对&#xff09;的见解在里面。 在看PointNet与PointNet之前&am…

第三章实验

实例一print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n") number = int(input("请输入您认为符合条件的数:")) if number%3 == 2 and number%5 == 3 and number%7 == 2:print(number,"符合条件:三三数之剩二,五五数…

GBase 8s是如何实现库中数据安全保障的

随着计算机网络的广泛应用&#xff0c;网上信息的开放性与共享性日益增强&#xff0c;但随之而来的是信息安全问 题愈发严重。数据库是这些数据信息存储的主要场所&#xff0c;因此确保数据库中存储以及存取信息的安 全是确保网络安全的首要问题。为此&#xff0c;需要在通用的…

Nginx在Linux下的安装

✨ Nginx在Linux下的安装安装pcre安装其他的依赖安装Nginx(把压缩包放到opt目录)&#x1f4c3;个人主页:不断前进的皮卡丘&#x1f31e;博客描述:梦想也许遥不可及&#xff0c;但重要的是追梦的过程&#xff0c;用博客记录自己的成长&#xff0c;记录自己一步一步向上攀登的印记…

软件测试 git和gitee集成Pycharm 基于Flask的Mock Server服务器

文章目录1 Git1.1 作用1.2 工具1.3 名称解释2 安装git和注册Gitee3 使用Git(1)clone克隆命令(2)初始化(3)查看文件状态(4)文件提交暂存区(5)提交到本地版本库(6)修改文件(7)查看日志(8)跳转到提交的时间截点4 git和gitee集成Pycharm4.1 在Pycharm安装git和连接gitee(1)新建项目…