5:二分法
5:二分法
常见的二分是在有序数组上的开展的二分搜索。
有时,有序非必要条件,会给定特定条件,只要能正确构建左右两侧的淘汰逻辑,就可以二分。
二分最经典的例子:取一半时,向下取整
在有序数组中,找某个数是否存在。
比较
mid = (L+R)/2 不安全,会溢出
mid = L + ((R - L) >> 1);
1 public static boolean exist(int[] sortedArr, int num) {
2 if (sortedArr == null || sortedArr.length == 0) {
3 return false;
4 }
5 int L = 0;
6 int R = sortedArr.length - 1;
7 int mid = 0;
8 // L....R
9 while (L < R) {// L..R 至少两个数的时候
10 mid = L + ((R - L) >> 1);
11 if (sortedArr[mid] == num) {
12 return true;
13 } else if (sortedArr[mid] > num) {
14 R = mid - 1;
15 } else {
16 L = mid + 1;
17 }
18 }
19 //while条件不成立时,L>=R时,
20 //其实只要L==R时,while就停止了;只有一个数,判这个数和num的关系返回
21 return sortedArr[L] == num;
22 }

浙公网安备 33010602011771号