简单有趣的二分查找
二分法
二分的模板有许多种,下面列举一种:
1 | /** |
二分查找的时间复杂度为 O(lg n),在很多题目中都能使用这个技巧对题目进行简化。
比如在最长递增子序列中,可以使用二分将新的数插入到递增子序列中。
中等:911. 在线选举
由于此题的时间满足单调递增的性质,所以可以使用二分法来查询。
在做这道题的时候,需要找到第一个 <= target 的位置,我犯了两个错误。
- 处理边界情况,但实际上不需要处理。
- 当 nums[mid] <= target 时,我想的是令 right = mid - 1。理由是答案一定在左边,所以右边界要往左。这样想是错误的。
当我们要找第一个 <= target 的 index 时,我们应该想的是,mid 一定是满足条件的,所以答案在区间 [mid, right] 当中,自然而然要把左边界往右边移动。
这里容易想错,切记!
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LuoRongLuoRong!
评论