一些常见的面试算法模板,如动态规划、二分。。。
二分
简例示意
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
1 | 输入: nums = [-1,0,3,5,9,12], target = 9 |
示例 2:
1 | 输入: nums = [-1,0,3,5,9,12], target = 2 |
代码实现:
1 | class Solution { |
易错点
1.边界问题
参考博客彻底解决二分查找出现的死循环、边界问题
错误示例一
2.死循环
左区间成立,右区间不成立
时r - l等于1时,mid始终为l,也就是check(mid)永为true,造成死循环。
错误示例一
3.答案不是mid
一个例子
- 初始时,l = 1, r = 4。
- 第一次循环:m = 3,check(3) 返回 true,更新 l = 3。
- 第二次循环:m = 4,check(4) 返回 false,更新 r = 3。
- 第三次循环:l = 3, r = 3,循环终止。
模板代码
情况一:左区间不成立,右区间成立
1 | void bSearch(int l, int r){ |
情况二:左区间成立,右区间不成立
1 | void bSearch_2(int l, int r){ |