用一个经典的题目来讲解二分查找:
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target, 你找出给定目标值在数组中的开始位置。
int search(int[] nums, int target){
int l = 0;
int r = nums.length - 1;
while(l <= r){
int mid = (l + r) / 2;
if(nums[mid] >= target){
r = mid - 1;
} else {
l = mid + 1;
}
}
return l; // 或者 r + 1
}
int search(int[] nums, int target){
int l = 0;
int r = nums.length;
while(l < r){
int mid = (l + r) / 2;
if(nums[mid] >= target){
r = mid;
} else {
l = mid + 1;
}
}
return l; // 或者 r
}
int search(int[] nums, int target){
int l = -1;
int r = nums.length;
while(l + 1 < r){
int mid = (l + r) / 2;
if(nums[mid] >= target){
r = mid;
} else {
l = mid;
}
}
return l + 1; // 或者 r
}