《面试笔试算法上》-二分专题
- 大统领投票(排序):结构体(字符串、编号)排序(
const node &a) - 吃瓜群众:结构体排序+朴素二分(1.
while(l < r)2. mid 3. 判等 4. 小于or大于);细节(int mid = ((long long)l + r)) - 吃瓜群众升级:特殊二分(
00001111情况,套路:1.while (l != r)2.mid = (l + r) / 23.if (t <= f[mid]) r = mid4.l = mid + 1);瓜节点(最大瓜,超int); - ☆ 暴躁的程序员(最近的程序猿最大距离):二分答案;模式(最大的最小的;最小的最大的);解题思路(1. 答案的边界值 2.判断
0011还是11003. 关键函数(根据答案ans得判断依据cond));对于111000的套路是(1.while (l != r)2.mid = (l + r + 1) / 23.if (func(ans_mid) >= cond) l = mid4.r = mid - 1);代码(int n ,m;定义在全局区,对于函数中也可以直接使用) - ☆ 切绳子(小数二分):浮点数的步骤(1.
while (r - l > EPSLON)2.double mid = (l + r) / 23.if () l = mid4.r = mid);注意:if();l = mid, r = mid条件判断的大于小于号要符合实际要求;直接舍弃小数点后两位的小数(printf("%.2f", (int)(l * 100) / 100.0));替代floor函数,double / double 给到int中 - leetcode-278:第一个错误版本:leetcode刷题环境;
int mid = ((long long)l + r) / 2;(防止整型溢出)
参考文献
2.二分专题

本文深入探讨了二分专题,涉及排序算法(如结构体排序与特殊二分)、编程挑战(如最大距离问题与小数二分)、LeetCode实例(278题解法改进)以及面试常见问题。讲解了不同场景下的二分搜索策略,如大统领投票排序、特殊数值处理和浮点数精度控制。
176万+





