二分查找相关
二分查找相关
经典二分查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int binarySearch(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
二分查找条件临界点
1
2
3
4
5
6
7
8
9
static int lowerBound(int[] arr, int target, int l) {
int r = arr.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid] >= target) r = mid - 1;
else l = mid + 1;
}
return l;
}
- 以
arr[mid] >= target为条件,将数组看作[false, false, true, true, true],返回第一个 true 的索引 2 - 题链:https://www.luogu.com.cn/problem/P1102
本文由作者按照 CC BY 4.0 进行授权