已知一个有序数组arr,和一个数字num。返回数组中是否含有这个数字。(使用二分法)
package class01; import java.util.Arrays; /** * 二分法 * 已知一个有序数组arr,和一个数字num。返回数组中是否含有这个数字。(使用二分法) * <p> * 常规二分法的时间复杂度,O(logN)。 * O(log2N),即log以2为底,N的对数。 * <p> * 一次砍一半,一次砍一半,一次砍一半。 * N个数,一共砍几次呢?一共砍了O(log2N)次,每砍一次,看一眼这个中点上的数,是O(1)的。 * 所以就是log2N乘以1,还是O(log2N)。 */ public class Code04_BSExist { public static void main(String[] args) { //当写while (L < R)时,是错误的,反例如下。正确的写法是while (L <= R)。 //-24 -21 -19 -13 -10 -8 0 7 10 10 20 //int[] arr = {-24, -21, -19, -13, -10, -8, 0, 7, 10, 10, 20}; int maxSize = 30; int maxValue = 30; int testTimes = 10; int num = 7; boolean flag = true; for (int i = 0; i < testTimes; i++) { int[] arr = generateRandomArray(maxSize, maxValue); Arrays.sort(arr); printArr(arr); System.out.println(num); boolean b = exist(arr, num); System.out.println(b); System.out.println("---"); boolean test = test(arr, num); if (b != test) { flag = false; break; } } System.out.println(flag ? "nice!" : "oops!"); } public static boolean exist(int[] sortedArr, int num) { int L = 0; int R = sortedArr.length - 1; while (L <= R) { int mid = L + ((R - L) >> 1);//必须要加括号,否则会先算加法,导致死循环。 if (sortedArr[mid] < num) { L = mid + 1; } else if (sortedArr[mid] > num) { R = mid - 1; } else { return true; } } return false; } public static int[] generateRandomArray(int maxSize, int maxValue) { int[] arr = new int[(int) ((maxSize + 1) * Math.random())]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random()); } return arr; } public static void printArr(int[] arr) { for (int i : arr) { System.out.print(i + " "); } System.out.println(); } public static boolean test(int[] arr, int num) { for (int i : arr) { if (i == num) { return true; } } return false; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码