二分搜索模板

翻了一下自己的博客。记录了花花酱的二分搜索模板、王争的二分搜索模板。
花花酱的文章中提到:不要试图去找一个正确答案。试图去找一个分割点m,使得x>=m,g(x)>0为true。这个始终get不到。
王争的二分模板思路是比较简单的,就是时间长了,忘记了。考虑边界值的时候,是在代码逻辑中考虑,容易理解。

接下来记录一下labuladong的二分搜索模板。

1 查找目标值

简单二分,查找目标值。

int binarySearch(int[] nums, int target) {int left = 0; int right = nums.length - 1; // 注意while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] == target)return mid; else if (nums[mid] < target)left = mid + 1; // 注意else if (nums[mid] > target)right = mid - 1; // 注意}return -1;
}

2 查找目标值的左边界

查找目标值的左边界,也就是第一个等于目标值的位置。

int left_bound(int[] nums, int target) {int left = 0, right = nums.length - 1;// 搜索区间为 [left, right]while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {// 搜索区间变为 [mid+1, right]left = mid + 1;} else if (nums[mid] > target) {// 搜索区间变为 [left, mid-1]right = mid - 1;} else if (nums[mid] == target) {// 收缩右侧边界right = mid - 1;}}// 检查出界情况,因为退出条件是left=right+1if (left >= nums.length || nums[left] != target)return -1;return left;
}

在这里插入图片描述

左侧边界的含义是:数组中<target的数有多少个,取值区间是[0,nums.length]

如果target<nums中的任何元素,那么在整个搜索过程中right会不断变小,left=0,所以此时退出条件是right<=-1。因为该方法中返回的是left,所以不需要检查边界。
如果target>nums中的任何元素,那么在个搜索过程中left会不断变大,所以此时的退出条件是left>=nums.length。因为该方法中返回的是left,这个时候left会越界,所以需要检查。

3 查找目标值的右边界

查找目标值的右边界,也就是最后一个等于目标值的位置。

int right_bound(int[] nums, int target) {int left = 0, right = nums.length - 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;} else if (nums[mid] == target) {// 这里改成收缩左侧边界即可left = mid + 1;}}// 这里改为检查 right 越界的情况,见下图if (right < 0 || nums[right] != target)return -1;return right;
}

在这里插入图片描述

因为当nums[mid] == target的时候,修改的是left,那退出循环的时候left指向的可能nums[left]不等于target,所以检测right。
那这个时候right一定指向nums[right]=target吗?

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

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

相关文章

spring mvc学习(49):返回json数据

json包下载 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

理解transformer

文章目录1 注意力机制2 自注意力机制3 自注意力机制加强版4 Transformer的结构4.1 input4.2 encoder4.2.1 Multi-head attention4.2.2 残差链接4.2.3 层正则化layer norm4.2.4 前馈神经网络 feed forward network4.3 decoder4.3.1 输入4.3.1 Masked Multi-head attention4.3.2 …

第一百三十七期:一个简单的小案例带你理解MySQL中的事务

事务又叫做TCL&#xff0c;全称是transaction control language&#xff0c;意思是事务控制语言。 作者&#xff1a;Java的架构师技术栈 事务又叫做TCL&#xff0c;全称是transaction control language&#xff0c;意思是事务控制语言。这篇文章还是属于我的mysql基础文章&…

解决ffmpeg拉流转发频繁丢包问题max delay reached. need to consume packet

软件&#xff1a; 1、流媒体服务器EasyDarwin-windows-8.1.0-1901141151 2、ffmpeg-20181001-dcbd89e-win64-static 3、直播源&#xff1a;rtsp://192.168.1.168/0 4、流媒体服务器EasyDarwin地址rtsp://192.168.1.28/3 问题现象 [rtsp 0000000000122bc0] max delay reached. …

第一百三十八期:37 个MySQL数据库小知识,为面试做准备

无论是运维、开发、测试&#xff0c;还是架构师&#xff0c;数据库技术是一个必备加薪神器&#xff0c;那么&#xff0c;一直说学习数据库、学MySQL&#xff0c;到底是要学习它的哪些东西呢? 作者&#xff1a;芒果教你学编程 无论是运维、开发、测试&#xff0c;还是架构师&…

第一百三十九期:11月数据库排行:排名前三数据库分数暴跌

DB-Engines 数据库流行度排行榜 11 月更新已发布&#xff0c;与上期数据相比&#xff0c;这期排行榜最大的亮点就是排名前三数据库那引人注目的“红色”分数。 作者&#xff1a;局长 DB-Engines 数据库流行度排行榜 11 月更新已发布&#xff0c;排名前二十如下&#xff1a; ▲…

对话系统之NLU总结报告

文章目录1 项目介绍1.1 背景知识介绍1.2 数据集介绍1.3 评价指标2 技术方案梳理2.1 模型目标2.2 模型介绍2.3 模型实现2.3.1 数据处理2.3.2 构建dataset2.3.3 模型定义2.3.4 训练相关参数2.3.5 训练结果3 项目总结1 项目介绍 1.1 背景知识介绍 对话系统按领域分类&#xff0c…

闲聊型对话系统之NLG总结报告

文章目录1 项目介绍1.1 背景知识介绍1.2 NLG的实现方式1.2.1 基于模板1.2.2 检索式1.2.3 生成式1.3 数据集介绍2 技术方案梳理2.1 模型介绍2.2 评价指标2.3 模型实现2.3.1 数据处理2.3.2 构建dataset2.3.3 模型定义2.3.4 训练相关参数2.3.5 训练结果1 项目介绍 1.1 背景知识介…

spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe

今天朋友发了个maven项目给我看&#xff0c;问我为什么启动不了。说实话&#xff0c;一直用Jfinal都快不会用spring了… 还是决定看看。 接收了文件&#xff0c;是maven构建的&#xff0c;打开eclipse&#xff0c;导入maven项目&#xff0c;然后部署到tomcat&#xff0c;启动t…

Luogu2439 [SDOI2005]阶梯教室设备利用 (动态规划)

同上一题&#xff0c;区间改左闭右开就双倍经验了。貌似可以跑最长路。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a (b); a < (c); a) #defi…

spring mvc学习(51):jsonp

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

什么是word2vector

原文地址&#xff1a;https://www.julyedu.com/questions/interview-detail?quesId2761&cateNLP&kp_id30 什么是 Word2vec? 在聊 Word2vec 之前&#xff0c;先聊聊 NLP (自然语言处理)。NLP 里面&#xff0c;最细粒度的是 词语&#xff0c;词语组成句子&#xff0c…

spring mvc学习(52):json数据类型提交

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

关注:Eclipse,转贴eclipse CDT的开发文章

致谢&#xff1a;Tinyfool的鼎立相助&#xff01; cdt是在eclipse中编写C程序的插件&#xff0c;虽然还不是很完美&#xff0c;但是是在windows中编写linux下C程序&#xff08;GNU C&#xff09;的一个好途径。按照eclipse的官方网站的要求&#xff0c;要下载如下的东东…

第三课 SVM(2)

1 线性可分的数据集 1.1 超平面 SVM的思想是找到最大间隔的分隔超平面。 在两个分类中&#xff0c;找到能够一条线&#xff0c;以最好地区分这两个分类。这样如果有了新的点&#xff0c;这条线也能很好地做出分类。 这样的线在高维样本中的时候就叫做超平面。 1.2 几何间隔与…

《C Traps and Pitfalls》 笔记

这本书短短的100多页&#xff0c;很象是一篇文章。但是指出的很多问题的确容易出现在笔试的改错题中--------------------------------------------------------------------第1章 词法陷阱1.1 和 1.3 词法分析的"贪心法则"编译器从左到右读入字符&#xff0c;每个符…

spring mvc学习(53):回顾和springmvc返回值类型总结

媒体类型 MIME媒体类型&#xff08;简称MIME类型&#xff09;是描述报文实体主体内容的一些标准化名称&#xff08;比如&#xff0c;text/html、image/jpeg&#xff09;。 因特网有数千种不同的数据类型&#xff0c;HTTP仔细地给每种要通过web传输的对象都打上了名为MIME类型的…

2019hdu多校1

1009 考虑贪心&#xff0c;暴力枚举一位。 $o(676n)$ #include<bits/stdc.h> using namespace std; const int N1e5333; int n,m,zl; int pos[26],cnt[N],t[26],az[N]; char s[N],st[N]; int l[N],r[N],nx[N],zzq[26]; int main(){ios::sync_with_stdio(0);//freopen(&qu…

关于梅花雪的js树

最近一段时间&#xff0c;为了学习java&#xff0c;天天在看别人的框架&#xff0c;为了实现一颗树&#xff0c;找到了一个改写梅花雪的js&#xff0c;下面是一个基本的结构<% page language"java" import"java.util.*" pageEncoding"GBK"%&g…

总和最大区间问题

题目和解题思路来源于吴军著作《计算之魂》。本题目是例题1.3。 文章目录1 问题描述2 解题思路2.1 三重循环2.2 两重循环2.3 分治法2.4 正反两遍扫描的方法2.5 再进一步&#xff0c;假设失效3 应用动态规划1 问题描述 总和最大区间问题&#xff1a;给定一个实数序列&#xff0…