《力扣面试150题》题单拓展——二分法
《力扣面试150题》题单拓展——二分法
困难题:找第K大/小
最大化最小值
1. 基础知识
首先可以确定答案的上下界
单调性分析:如果当前答案为m时,可以满足,一定有一侧是一定满足的,另一侧不一定,需要去探索
bool is_ok(){
}
int l, r;
int ans;
while(l <= r){
int m = l+((r-l)>>1);
if(is_ok()){
ans = m;
r = m-1; //根据情况而定
}
else
l = m+1;
}
return ans;
2. is_ok()
我认为对于不同的题,整体主函数都是一样的,唯一的难点就是怎么去更好更快的判断出当前答案m是否满足要求,定制此函数才是最难的
a.简单线性扫描
875.爱吃香蕉的珂珂 难度分:1766
判断在m速度下,吃完所有香蕉需要的时间是否小于期限h小时
a/b 向上取整:(a+b-1)/b
1283.使结果不超过阈值的最小除数 难度分:1542
判断除数之和是否 <= threshold即可,还用到了向上取整,嘿嘿嘿
2187.完成旅途的最少时间 难度分:1641
同样是除数之和,不过是向下取整
2226.每个小孩最多能分到多少糖果 难度分:1646
同上
1870.准时到达的列车最小时速 难度分:1676
只需要注意一下最后一个数据的处理就可以了
1760.袋子里最少数目的球 难度分:1940
可以根据最大化最小值 or 最小化最大值 去确定满足时候的转移条件
2064.分配给商店的最多商品的最小值 难度分:1886
最小化最大值——这个的保存结果和is_ok()很有意思
简单扫描一遍
b.带有历史标记的线性扫描
1011.在D天内送达包裹的能力 难度分:1725
运送满足的连续段,注意单体不符合的return点
1482.制作m束花所需的最少天数 难度分:1946
1552.两球之间的磁力 难度分:1920
注意是否需要排序,最大化确定转移方向
1642.可以到达的最远建筑 难度分:1962
*标记未做
也算是分组循环了,找到一组末尾,一起统计数字
2141.同时运行N台电脑的最长时间 难度分:2265
碎电池的转换,已经整块电池的维护
c.滑动窗口
去掉max的窗口内是否满足要求,也是找段
感觉也可以叫做历史的线性线性扫描
d.规律计算
1954.收集足够苹果的最小花园周长 难度分:1759
总结找公式
1802.有界数组中指定下标处的额最大值 难度分:1929
将求和推导公式化
查询乘法表时,按照每行去统计数字,每行之间都有规律
本文来自博客园,作者:小柴cyl,转载请注明原文链接:https://www.cnblogs.com/cyl018/p/cyl.html

《力扣面试150题》题单拓展——二分法
浙公网安备 33010602011771号