力扣-二分应用题

1.875. 爱吃香蕉的珂珂,传统二分,左闭右开,返回left/right即可。

2.222. 完全二叉树的节点个数,利用完全二叉树结合二分,+位运算,注意level=0的特殊情况,返回left-1。需要灵活运用二分查找。

3.69. x 的平方根,上限粗略定为x,注意循环条件、l/r的赋值、返回结果。

4.744. 寻找比目标字母大的最小字母,比较基础的二分的方法,right指向size长度即可。

5.540. 有序数组中的单一元素,判断mid与mid-1位置更新left和right;只遍历数组中的偶数下标。有点难度。

6.278. 第一个错误的版本,稚嫩了,right不用n+1。

8.1631. 最小体力消耗路径,二分思路结合BFS/DFS,初始化为消耗最小值,最大值,对mid求00和m*n-1是否能够连通,以此来减小搜索范围得出答案。

9.778. 水位上升的泳池中游泳,与上题类似,二分结合BFS/DFS判断连通性,上题是控制边的权重,此题是控制点的权重不超过某值t,visit数组来标记是否访问过,判断连通性。

10.378. 有序矩阵中第 K 小的元素,有序矩阵中的查找,利用行有序和列有序进行二分。(复习时想不到时这种解法,挺难的)在判断有多少<mid时利用矩阵的性质复杂度为O(n)。

 

旋转数组专题:

1.1 153. 寻找旋转排序数组中的最小值,找到无序的部分,mid和right比较,right初始化为size-1,这里是数组内部之间比较,不是与外部target比较,所以即使初始化为size-1,while循环也无需=号。

2.189. 旋转数组,这个不是二分的解法,因为是有关旋转的所以放到了这里。reverse之后reverse局部;通过记录pre防止覆盖,通过start来确认是否多次循环。牛。

 

第k小的数:

1. 668. 乘法表中第k小的数,确定最大值和最小值,计算<=mid的值的个数,寻找左边界。

2. 719. 找出第 K 小的数对距离,对数对距离二分,计算<=mid的数的个数,寻找左边界,因为刚好=k的不一定是真正的数对距离。没想到使用二分的解法。

posted @ 2020-11-24 15:29  lypbendlf  阅读(117)  评论(0编辑  收藏  举报