下载资源后端资源详情
06已知一个有序数组arr,和一个数字num。返回数组中是否含有这个数字。(使用二分法).zip
大小:1.19KB
价格:45积分
下载量:0
评分:
5.0
上传者:weixin_44259230
更新日期:2024-08-19

06已知一个有序数组arr,和一个数字num 返回数组中是否含有这个数字 (使用二分法).zip

资源文件列表(大概)

文件名
大小
06.txt
2.66KB

资源内容介绍

已知一个有序数组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; }}

用户评论 (0)

发表评论

captcha

相关资源

i2pinstall_0.9.18_windows (1).zip

i2pinstall_0.9.18_windows (1).zip

14.01MB37积分

bugreport-2024-07-30-203317.zip

bugreport-2024-07-30-203317.zip

63.1MB44积分

【浏览器插件】Instapaper.zip

Instapaper 是一款简洁的应用程序,专为保存网页设计,方便您在 iPhone、iPad、Android 设备、电脑或 Kindle 上随时阅读。这款浏览器插件可以替代传统的书签功能,将您感兴趣的文章一键保存至 Instapaper 的阅读列表中。它的操作方式是将您当前浏览的网页保存到您的 Instapaper 账户。对于尚未登录的用户,系统会引导您前往登录或注册页面。一旦注册完成,您将被自动重定向回原始页面,并且该页面已被保存至您的阅读队列中。

170.85KB30积分

【浏览器插件】Octotree GitHub code tree.zip

增强 GitHub 代码审查与探索功能的浏览器扩展。主要特性包括:- 类似 IDE 的代码树快速浏览- 树状结构快速搜索代码- 将代码库、问题、PR 和文件添加至书签- 支持 GitHub 主题- 兼容私有仓库- 高性能设计,适用于任何规模的代码库专业版特有功能:- 多标签页浏览- 文件图标自定义主题- 代码字体个性化设置- 快速导航至 PR- 无限量书签- 拉取请求的深度代码审查- 侧边栏固定位置- 多 GitHub 账号支持- 兼容 GitHub 企业版了解更多详情,请访问:[Octotree 功能介绍](https://www.octotree.io/features)隐私政策:Octotree 承诺不追踪用户行为,不分享或关心您的数据。只有在访问私有仓库或超出 GitHub API 调用限制时,才需要使用 GitHub 令牌。令牌仅存储于浏览器,用于身份验证。

3.55MB19积分