二分查找注意事项

news2025/1/16 1:42:53

目录

1解题思路:首先二分查找分为左闭右闭和左闭右开两种情况,二种情况在细节处理上有所不同                                        

 2左闭右闭情况

 3左闭右开

 4总结:


 

1解题思路:首先二分查找分为左闭右闭和左闭右开两种情况,二种情况在细节处理上有所不同                                        

 2左闭右闭情况

注意while条件为left<=right,别忘记等号,因为目标值可能会出现在right==left的位置。

int search(int nums[], int size, int target)
{
	int left = 0;
	int right = size; 
	while (left <= right) {	//条件left < right 修改为 left <= right
		int middle = left + ((right - left) / 2);
		if (nums[middle] > target) {
			right = middle; 
		} else if (nums[middle] < target) {
			left = middle + 1;
		} else {
			return middle;
		}
	} 
    // 没找到就返回-1
	return -1;
}

 3左闭右开

这种情况下的循环条件为left<right,不能加=,

代码:

int search(int nums[], int size, int target)
{
	int left = 0;
	int right = size; //定义target在左闭右开的区间里,即[left, right)
	while (left < right) {	//因为left = right的时候,在[left, right)区间上无意义
		int middle = left + ((right - left) / 2);
		if (nums[middle] > target) {
			right = middle; //target 在左区间,在[left, middle)中 
		} else if (nums[middle] < target) {
			left = middle + 1;
		} else {
			return middle;
		}
	} 
    // 没找到就返回-1
	return -1;
}
 4总结:

二分法最重要的两个点,就是循环条件和后续的区间赋值问题;

因为两者是相互联系,相互影响的,所以就需要两者统一,如果两者不统一,就会出现问题

所以循环条件和赋值问题必须统一,也就是循环不变量。

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

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

相关文章

Go-知识sync map

Go-知识sync map 1. 用法1.1 声明1.2 增删改查1.3 增强操作 2. sync map 使用注意2.1 多读少写2.2 类型安全风险2.3 不能拷贝和传递 3. 实现原理3.1 数据结构3.2 read表数据结构3.3 entry 的数据结构3.4 sync map 的结构图3.5 插入数据3.6 查找数据3.7 再次插入3.8 删除数据 4.…

Unity基础学习

目录 基础知识点3D数学——基础Mathf三角函数坐标系 3D数学——向量向量模长和单位向量向量的加减乘除向量点乘向量叉乘向量插值运算 3D数学——四元数为何使用四元数四元数是什么四元数常用方法四元数计算 MonoBehavior中的重要内容延迟函数协同程序协同程序原理 Resources资源…

谁用过腾讯云轻量应用服务器2核2G3M配置,支持多少人在线?

腾讯云轻量应用服务器2核4G5M配置一年优惠价165元、252元15个月、三年756元&#xff0c;100%CPU性能&#xff0c;5M带宽下载速度640KB/秒&#xff0c;60GB SSD系统盘&#xff0c;月流量500GB&#xff0c;折合每天16.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支…

uniapp实现点击标签文本域中显示标签内容

先上一个效果图 实现的效果有&#xff1a; ①.点击标签时&#xff0c;标签改变颜色并处于可删除状态 ②.切换标签&#xff0c;文本域中出现标签的内容 ③.点击标签右上角的删除可删掉标签&#xff0c;同时清除文本域中标签的内容 ④.可输入内容&#xff0c;切换时不影响输入…

系统设计学习(三)限流与零拷贝

七、有哪些常用限流算法&#xff1f; Leaky Bucket 漏桶 漏桶可理解为是一个限定容量的请求队列。想象有一个桶&#xff0c;有水&#xff08;指请求或数据&#xff09;从上面流进来&#xff0c;水从桶下面的一个孔流出来。水流进桶的速度可以是随机的&#xff0c;但是水流出桶…

蓝桥杯小白赛第 7 场 3.奇偶排序(sort排序 + 双数组)

思路&#xff1a;在第一次看到这道题的时候我第一想法是用冒泡&#xff0c;但好像我的水平还不允许我写出来。我又读了遍题目发现它的数据很小&#xff0c;我就寻思着把它分成奇偶两部分。应该怎么分呢&#xff1f; 当然在读入的时候把这个问题解决就最好了。正好它的数据范围…

前端项目(vue3)自动化部署(Gitlab CI/CD)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C语言练习题【复试准备】

1、BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi&#xff0c;转换以下ASCII码为对应字符并输出他们。 //73,32,99,97,110,32,100,111,32,105,116,33 int main() {int arr[] {73,32,99,97,110,32,100,111,32,105,116,33};int i …

Swift:.ignoresSafeArea():自由布局的全方位掌握

ignoresSafeArea(_ regions : edges:)修饰符的说明 SwiftUI布局系统会调整视图的尺寸和位置&#xff0c;以避免特定的安全区域。这就确保了系统内容&#xff08;比如软件键盘&#xff09;或设备边缘不会遮挡您的视图。要将您的内容扩展到这些区域&#xff0c;您可以通过应用该修…

一文看懂红帽认证含金量有多高!

近期好多人来问红帽认证&#xff0c;有些是还在校的大学生&#xff0c;有些是已经工作的运维小伙伴。!现在的就业和职场环境下&#xff0c;系统学Linux确实是非常必要的。今天就给大家详细介绍下红帽认证&#xff0c;看看它的含金量有多高! 红帽认证是什么?红帽认证等级?红帽…

Sublime查看ANSI编码文档乱码问题

原因为没有安装对应的解码插件。 选择安装插件包 选择插件包&#xff1a;ConvertToUTF8或者GBK&#xff0c;我试了第一个插件包不行&#xff0c;安装GBK插件包后OK。

AI车辆占道识别摄像机

随着城市车辆数量的增加和交通状况的复杂化&#xff0c;道路交通安全问题日益突出&#xff0c;其中车辆占道现象严重影响了交通秩序和道路通畅。为了有效监管和防范车辆占道行为&#xff0c;AI车辆占道识别摄像机应运而生&#xff0c;利用人工智能技术&#xff0c;实现对车辆占…

探索CorelDRAW软件2024最新中文版的强大魅力,让你的电脑数码设计更上一层楼!

在当今日益发展的数字化时代&#xff0c;设计已成为连接创意与现实之间的桥梁&#xff0c;而CorelDRAW软件则是设计师们手中的得力助手。特别是随着CorelDRAW 2024最新中文版的发布&#xff0c;这一设计工具的魅力和功能得到了进一步的提升&#xff0c;为广大设计师们提供了前所…

strcmp的模拟实现

一&#xff1a;strcmp函数的定义&#xff1a; strcmp函数功能的解释&#xff1a; 比较两个字符串的大小&#xff08;按照字符串中字符的ascll码值&#xff09;。 标准规定&#xff1a; 第一个字符串大于第二个字符串&#xff0c;则返回大于 0 的数字 第一个字符串等于第二个…

Redis持久化和集群

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

每日一题 第四期 洛谷 查找文献

【深基18.例3】查找文献 链接 题目描述 小 K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个&#xff08;也有可能没有&#xff09;参考文献的链接指向别的博客文章。小 K 求知欲旺盛&#xff0c;如果他看了某篇文章&#xff0c;那么他一定会去看这篇文章的参考文献&…

Mybatis sql 控制台格式化

package com.mysql; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.logging.Log;import java.util.*;/*** Description: sql 格式化* Author: DingQiMing* Date: 2023-07-17* Version: V1.0*/ public class StdOutImpl implements Log {private stati…

石子合并多种解法

线性朴素n^3 using ll long long;int dp1[305][305], dp2[305][305]; int main() {int n;std::cin >> n;std::vector<int>a(n 1), sum(n 1);//扩增,计算前缀和for (int i 1; i < n; i) {std::cin >> a[i];sum[i] sum[i - 1] a[i];}//i是区间for (i…

洛谷P1182数列分段

题目描述 对于给定的一个长度为 N 的正整数数列 &#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 14 2 4 5 1 要分成 33 段。 将其如下分段&#…

攻防世界-CatchCat

题目&#xff1a;附件为 分析题目&#xff0c;可知文件里面是一堆关于GPS的数据&#xff0c;所以我们将GPS的轨迹绘制出来&#xff08;GPS地图绘制网站&#xff1a;GPS Visualizer&#xff1a;从 GPS 数据文件绘制地图&#xff09; 将文件导入后绘制地图&#xff0c;得到如图&a…