学习与思考:
最近被二分虐的死去活来,通过广泛阅读各种大佬的总结和模板,自己整理一下心得:
- 理解二分的本质。
这也是我最近学习宫水三叶大佬的文章悟出的。
二分的本质不是单调,而是两段性。 只要某一段满足某个性质,而另一段不满足,就可以使用二分来求解。
单调只是一个性质,我们从有序数组中找某个数只是二分的应用。
- 二分难在细节。
不同的问题写法都有区别,我们最重要的是根据题目能够写出模板,而不是背出模板。
在数组中,我们一般会遇到两种情况,这两种情况本质上是没有区别的:
- 找到某个固定元素
- 找到满足条件的 第一个 / 最后一个元素
- 二分模板:
网上有两种不同的模板,一种是闭区间,另一种是左开右闭区间。 其中,左开右闭区间的写法更加灵活,更适合情况较为复杂的题目。
「二分」模板其实有两套,主要是根据 check(mid) 函数为 true 时,需要调整的是 l 指针还是 r 指针来判断。
• 当 check(mid) == true 调整的是 l 时:计算 mid 的方式应该为 mid = l + r + 1 >> 1:
/* che