利用在有序数组中找num的题目,来上手二分查找。
假设,在有序数组 [1,1,2,3,4,5,7,9]中查找2,二分的话,中点可以是3或者4,假设已上边界为中点,第一次查找,2 < 3,将1作为中点,2 > 1,再次查询,2 = 2。
public static boolean findNum(int[] arr, int num) {
if (arr == null || arr.length == 0) {
return false;
}
int L = 0;
int R = arr.length - 1;
int middle = (L + R) / 2;
while (L < R) {
if (arr[middle] == num) {
return true;
} else if (arr[middle] < num) {
L = middle + 1;
middle = (L + R) / 2;
} else {
R = middle - 1;
middle = (L + R) / 2;
}
}
return false;
}
根据上一篇看到的Math.random(),可使用Math.random()函数当对数器,随机生成数组,可用于算法的检验。
public static int[] generateArr(int maxLength, int maxValue) {
int[] arr = new int[(int) (Math.random() * maxLength) + 1];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * maxValue);
}
return arr;
}