首页 > 其他分享 >二分的理解

二分的理解

时间:2022-09-18 20:12:39浏览次数:71  
标签:二分 第一种 找到 mid while 理解 第二种

今天在写一道二分的题的时候,使用二分后得到的结果并不是想要的。于是怀疑起自己是否打错板子了,后面发现并没有,但也让我明白了哪里不足。

二分有两种通用的板子

第一种

	int l = 0, r = n, mid;
	while(l < r)
	{
		mid = (l + r) >> 1;
		if(a[mid] >= x) r = mid;
		else l = mid + 1;
	}

第二种

	l = 0, r = n, mid;
	while(l < r)
	{
		mid = (l + r + 1) >> 1;
		if(a[mid] <= x) l = mid;
		else r = mid - 1;
	}

其中第一种通常用来找比x大的第一个数,第二个用来找比x小的最后一个数

例如:x = 3
a[] = {1,2,4,4,5};
此时第一种会找到4, 第二种会找到2

但这有个前提条件就是数组中没出现过x, 如果出现,那么第一种将找到第一个等于x的位置,第二种将找到最后一个等于x的位置

例如:x = 3
a[] = {1,2,3,3,3,4};
此时第一种会找到下标为2,数值为3的元素,第二种会找到下标为4,数值为3的元素

标签:二分,第一种,找到,mid,while,理解,第二种
From: https://www.cnblogs.com/lbzbk/p/16705617.html

相关文章

  • 对软件工程的理解
    定义软件工程是一门研究如何高效编写和维护软件方法的学科。随着计算机计算能力上升,越来越多学科的发展离不开计算机软件的辅助,程序员需要编写各种软件运用于不同学科,但由......
  • 深入理解C++的new和delete
    一、C++中的动态内存管理方式C语言中的动态管理方式是用malloc、free函数,它们在C++仍然可以继续使用,但是由于在部分地方略显无能为力,且使用起来比较麻烦,所以C++提出了自己......
  • KMP算法的底层理解
    KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。KMP的精髓所在就是前缀表。(下面用next[]数组来表......
  • 通关基本算法 day_03 -- 二分算法
    整数二分本质如果有单调性的话-->我可以二分,反之不然整个区间可以一分为二,我们定义了一个性质,右半边是满足这个性质的,但是左半边不满足二分可以寻找这个性质的边界......
  • 【Java面试】面试遇到宽泛的问题,这么回答就稳了,谈谈你对Redis的理解
    “谈谈你对Redis的理解”!面试的时候遇到这类比较宽泛的问题,是不是很抓狂?是不是不知道从何开始说起?没关系,今天我用3分钟教你怎么回答。大家好,我是Mic,一个工作了14年的......
  • 深入理解Java虚拟机 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/10bghuXmuORphqav7XRqgmg点击这里获取提取码 ......
  • RocketMQ实战与原理解析-杨开元.pdf
    这是一本学习RocketMQ实战与实现原理的非常好的资料,内容言简意赅,非常适合初学者和对RocketMQ有一定使用经验的人,能够快速从全局层面掌握RocketMQ设计思想与核心实现。点击......
  • 关于vue2.x的一些问题理解
    目录1、data()方法2、数据流的双向绑定与单项绑定3、keep-alive标签4、router-view标签5、组件中方法中的this指向的是当前组件的顶级(根)元素(重要)6、this.$refs.属性名(......
  • 倒排索引的理解
    https://blog.csdn.net/qq_39144436/article/details/124509108搜索的核心目标实际上是保证搜索的效果和性能,为了高效的实现全文检索,我们可以通过倒排索引来解决。倒排......
  • Kakfa系列丛书推荐之《深入理解Kafka:核心设计与实践原理》
    编者推荐本书从Kafka的基本概念入手,主要从生产端、消费端、服务端等3个方面进行全面的陈述,主要内容包括Kafka的基本使用方式、生产者客户端的使用、消费者客户端的使用......