2020-11-2 二分查找的适用题型以及使用模板

1.什么样的题目可能会用二分?

二分的本质:
• 存在一个整数m。使得
• 当i<=m时,f(i)为真(假)。
• 当i>m时,f(i)为假(真)。
• 因为这个性质能使我们找到分界点:
• 当f(i)为真时,i <=分界点m。
• 当f(i)为假时,i>分界点m.

通俗易懂的说,题目中有唯一的分界线,在分界线两边性质不一样。这样的题目适用于用二分查找。

题目上的特征:
尽可能数量多;满足条件的最小;满足条件的最多;

2.举例题目

leetcode455:
• 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。
• 但是,每个孩子最多只能给一块饼干。
• 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的
饼干的最小尺寸;
• 并且每块饼干 j,都有一个尺寸 s[j] 。
• 如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子
会得到满足。
• 你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

思考:
• 如果我能喂饱5个孩子。我能不能喂饱4个孩子? 能
• 如果我喂不饱6个孩子。我能不能喂饱7个孩子?不能
所以5是唯一的分界线 ,返回L
—————————————————————————
leetcode209:
• 给定一个含有 n 个正整数的数组和一个正整数 s ,
• 找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,
• 并返回其长度。
• 如果不存在符合条件的子数组,返回 0。
• s = 7, nums = [2,3,1,2,4,3]
• 子数组 [4,3] 是该条件下的长度最小的子数组

思考:长度为n满足,长度为n+1满足吗?因为全是正整数,所以必满足。长度n-1满足吗?不一定,有可能满足也有可能不满足,但是向不满足的方向走。就是在找分界线,返回R
—————————————————————————
leetcode275
给定一位研究者论文被引用次数的数组(被引用次数是非负整
数),数组已经按照 升序 排列 。
• 编写一个方法,计算出研究者的 h 指数。
• h 指数的定义: 有至少h篇论文被引用了至少h次。
• [0,1,3,5,6]
• 有三篇文章至少被引用了三次。

思考:3满足,2满足吗? 必然满足。4满足吗?不一定,有可能满足有可能不满足,向不满足的趋势走。返回L
—————————————————————————

3.二分的模板

开始时,left落在红色区域,right落在绿色区域。
• 从(L, R)中随机选择一个数字mid,(L < mid < R)。
• 如果mid是绿色,则令R = mid。
• 如果mid是红色,则令L = mid。
• 重复步骤二。
在这里插入图片描述
模板:
在这里插入图片描述
(1)L+1<R (2) (L+R)/2 (4)R (5) L
后面的返回L 还是R看题目而定。一般情况下,最大(最后一个)值——return L,最小(第一个)值——return R,不一定对,具体还是得看题目。

注意:left不一定一开始就是红色,right同理。所以, Right初值等于所有Left取值的最大值+1,Left初值 等于所有Right取值的最小值-1。都在取值范围之外靠谱一点,注意此时要考虑边界条件,即返回R还是L?如果不存在的时候怎么办?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值