二分注意点
- 二分的本质:二段性(见旋转数组)。 单调性一定可二分,二分不一定单调!
- 二分出来的一定是满足边界条件的,如二分条件>=x,但最后二分出来的可能>x,没有=x的,见整数二分模板题。
- 二分模板见y总
模板题
索引二分
- 153. 寻找旋转排序数组中的最小值(经典题,二分的本质:二段性)
- 154. 寻找旋转排序数组中的最小值 II(删除与
nums[0]
重复元素,转化为第一题,最坏O(n)
,重复元素的影响:如果重复,就不知道二分前半部分还是后半部分了) - 33. 搜索旋转排序数组(根据上题找出最小值索引点,把数组分为两段,根据
target <= nums.back()
判断在前段还是在后端,然后有序数组二分查找一个数即可) - 81. 搜索旋转排序数组 II(同样,删除与
nums[0]
重复元素,转化为I题,如果有重复,不知道二分的是前半段还是后半段) - 704. 二分查找(模板题)
- 35. 搜索插入位置(可能插在最后,边界考虑)
- 34. 在排序数组中查找元素的第一个和最后一个位置(模板题)
- 74. 搜索二维矩阵(坐标变换,
/m %m
) - 162. 寻找峰值
- 274. H 指数
- 275. H 指数 II
- 540. 有序数组中的单一元素
值域二分
69. x 的平方根(注意溢出,边界)
367. 有效的完全平方数(两个数相乘容易爆int)