- 什么是二分查找
在一个排好序的线性表中查找一个数
【常规】
目标:查找3的下标
【左边界查找】
目标:查找最左侧 3 的下标
【右边界查找】
目标:查找最右侧 3 的下标
- 二分查找代码注释
【常规】
【左边界查找】
解释里面先默认数在[ ,) 的[ 【右边界查找】
解释里面先默认数在[ ,) 的[
- 二分查找的构建
【常规]
int binarySearch(int[] nums,int target){
int left = 0,right = nums.length - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (nums[mid] == targt)
{
return mid;
}else if (nums[mid] < target)
{
left = mid + 1;
}else if (nums[mid] > target)
{
right = mid - 1;
}
}
return -1;
}
【左边界查找】
int left_bound(int[] nums,int target){
int left = 0, right = nums.length;
while (left < right)
{
int mid = left + (right - left) /2;
if (nums[mid] == target)
{
right = mid;
}else if (nums[mid] < target )
{
left = mid + 1;
}else if (nums[mid] > target)
{
right = mid;
}
}
if (left == nums.length || nums[left] != target )
{
return -1;
}
return left;
}
【右边界查找】
int right_bound(int[] nums,int target){
int left = 0, right = nums.length;
int mid = left + (right - left) / 2;
while ( left < right )
{
if (nums[mid] == target)
{
left = mid + 1;
}else if (nums[mid] < target)
{
left = mid + 1;
}else if (nums[mid] > target)
{
right = mid;
}
if (left == 0 ||nums[left - 1] != target)
{
return -1;
}
return left - 1;
}
}
- 二分查找的应用
Leetcode:- ⼆分查找(简单)
- 在排序数组中查找元素的第⼀个和最后⼀个位置(中等)