核心:
- 二分并不是仅仅用于找数字的,二分的二,其本质是两种不同的状态,通过每次排除一半来逼近两种状态的分界线,在找数字中,我们利用的两种状态就是数字左右两边大小不一样。
二分细节
注意事项:
-
所有情况均为
if else
语句,更加清晰 -
注意防止mid溢出
普通二分查找
在nums中搜索target,找到返回下标,否则返回-1.
int binarySearch(vector<int> nums, int target) {
int l = 0;
int r = nums.size() - 1; // @1
while(l <= r) // @2
{
int m = (r - l) / 2 + l;
if(nums[m] == target) return m; // 找到元素,返回下标
else if(nums[m] < target) l = m + 1;