《力扣面试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()很有意思


275.H指数II

简单扫描一遍

b.带有历史标记的线性扫描

1011.在D天内送达包裹的能力 难度分:1725

运送满足的连续段,注意单体不符合的return点


1482.制作m束花所需的最少天数 难度分:1946


1552.两球之间的磁力 难度分:1920

注意是否需要排序,最大化确定转移方向


1642.可以到达的最远建筑 难度分:1962

*标记未做


719.找出第K小的数对距离

也算是分组循环了,找到一组末尾,一起统计数字


2141.同时运行N台电脑的最长时间 难度分:2265

碎电池的转换,已经整块电池的维护

c.滑动窗口

LCP 12.小张刷题计划

去掉max的窗口内是否满足要求,也是找段


410.分割数组的最大值

感觉也可以叫做历史的线性线性扫描

d.规律计算

1954.收集足够苹果的最小花园周长 难度分:1759

总结找公式


1802.有界数组中指定下标处的额最大值 难度分:1929

将求和推导公式化


668.乘法表中的第k小的数

查询乘法表时,按照每行去统计数字,每行之间都有规律

posted @ 2023-11-29 16:40  小柴cyl  阅读(27)  评论(0)    收藏  举报
/*粒子线条,鼠标移动会以鼠标为中心吸附的特效*/