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     }

 

posted @ 2022-05-03 10:09  yzmarcus  阅读(49)  评论(0)    收藏  举报