二分查找算法代码:
package com.atguigu.Interview.study.base.er_fen_cha_zhao;
public class BinarySearch {
public static void main(String[] args) {
int[] array = {1, 5, 8, 11, 19, 22, 31, 35, 40, 45, 48, 49, 50};
int target = 48;
int idx = binarySearch(array, target);
System.out.println(idx);
}
public static int binarySearch(int[] a, int t) {
int l = 0, r = a.length - 1, m;
while (l <= r) {
m = (l + r) /2;
if (a[m] == t) {
return m;
} else if (a[m] > t) {
r = m - 1;
} else {
l = m + 1;
}
}
return -1;
}
}
针对整数溢出处理算法:
package com.atguigu.Interview.study.base.er_fen_cha_zhao;
public class IntegerOverflow {
public static void main(String[] args) {
method01();
method02();
}
private static void method02() {
int l = 0;
int r = Integer.MAX_VALUE - 1;
int m = (l + r) >>> 1; // l/2 + r/2 ===> l - l/2 + r/2 ===> l + (-l/2 + r/2) ===> l + (r - l)/2
//int m = l + (r - l)/2;
System.out.println(m);
// 在右侧
l = m + 1;
m = (l + r) >>> 1;
//m = l + (r - l)/2;
System.out.println(m); // 整数溢出
}
private static void method01() {
int l = 0;
int r = Integer.MAX_VALUE - 1;
//int m = (l + r) / 2; // l/2 + r/2 ===> l - l/2 + r/2 ===> l + (-l/2 + r/2) ===> l + (r - l)/2
int m = l + (r - l)/2;
System.out.println(m);
// 在右侧
l = m + 1;
//m = (l + r) / 2;
m = l + (r - l)/2;
System.out.println(m); // 整数溢出
}
}