课程学习–算法总结:数组专题(第1期)—二分查找
一、 二分查找的前提
有序,无重复
二、 二分查找四要素
-
mid赋值(取小二分)
mid = left + ((right - left) >> 1); -
while条件
左闭右闭(包含right)
左闭右开(不包含right) -
right初始值
左闭右闭:length-1,
左闭右开:length -
right赋值
左闭右闭:mid-1(才能跳出循环)
左闭右开:mid -
返回值
-1(没有找到)
mid+1(差一步找到,但已跳出循环)
三、 基础模板
// 左闭右闭
int left = 0;
int right = nums.length-1;
int mid;
while (left <= right) {
mid = left + ((right - left) >> 1);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid-1;
}
}
return -1;
// 左闭右开
int left = 0;
int right = nums.length;
int mid;
while (left < right) {
mid = left + ((right - left) >> 1);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid;
}
}
return -1;