当前位置: 首页 > news >正文

算法通关:006_1二分查找

查找一个数组里面是否存在num

import java.util.Arrays;/*** @Author: ggdpzhk* @CreateTime: 2024-07-23*/
public class _006 {//二分查找//保证数组有序才能用二分查找,不然无意义public static boolean exist(int[] arr,int num){if(arr == null || arr.length == 0){return false;}//最开始左右边界的搜索范围int l = 0;int r = arr.length-1;int m ;//表示中点坐标的变量while(l <= r){/*m = (l+r)/2;m = l + (r-l)/2;m = l + ((r-l) >> 1);上述两种写法都可以,但是第二种更好。第三行等同于第二行    右移一位就等于除以2防止溢出就是l+r可能会溢出(数字很大),在除以2 就会出问题但是先求差,加数较小*/m = l + (r-l)/2;if(arr[m] == num){return true;}else if(arr[m] > num){/*num:我们要找的数字中间值大于num,说明num如果存在,必在 中间值的左边所以查询范围修改左边 arr[0]   右边到 中间值的前一个,也就是arr[m-1]*/r = m - 1;}else {l = m + 1;}}//每次这种我都不知道 什么条件应该返回true或者false。//但是满足上面的情况我们就返回true,剩下的不管会出现什么情况 我们都返回false//这里面有程序员的思路,多练习,加油return false;}//为了验证//对数器//为了保证你上面的方法是正确的public static boolean right(int[] arr,int num){/*if(arr == null || arr.length == 0){return false;长度检查是无用的,不可能为null或者长度为0这些限制条件在 自己写的方法随机生成数组中已经考虑到了}*///暴力解//从数组第一个数字开始,一个一个对比,如果一样就返回true。后面代码不再执行//如果查找完整个数组都没有找到num,就返回truefor(int i : arr){if(i == num ){return true;}}return false;}//为了验证//方法:循环 随机生成数字放入数组元素public static int[] randomArray(int n,int V){//写一个循环 随机生成数字放入数组元素int[] arr = new int[n];for(int i = 0;i < arr.length;i++){arr[i] = (int)(Math.random()*V)+1; //1~V}return arr;}//为了验证//随机生成满足的数组,用于测试用例public static void main(String[] args) {//   这里都是对数器的测试,如果测试通过,那我们应该写具体的输出语句,显示测试的数组和 num,以便更好地理解测试过程。/*int N = 5;//数组元素个数int V = 100;//数组最大值int testTimes = 20;//测试次数System.out.println("测试开始");for(int i = 0;i < testTimes;i++) {int n = (int) (Math.random() * N + 1);//1~N//调用方法 生成测试数组用例int[] arr = randomArray(n, V);Arrays.sort(arr);//Arrays包自带的方法,将数组从小到大排序。// 或者你用冒泡选择插入排序三种自己写的方法都行,但是人家有自带的方法为什么不用int num = (int) (Math.random() * V);// [0,V)--------选定num,看数组里有没有这个数// 这里的N写啥都行吧,就是随机生成一个数,目前对num没有条件限制//有了num,有了数组,接下来是不是就直接调方法,查找数组中有没有numif (exist(arr, num) != right(arr, num)) {System.out.println("出错了");}}System.out.println("测试结束");*/int n = 10;//几个元素int v = 20;//元素范围int[] arr = randomArray(n,v);System.out.println("数组是:"+Arrays.toString(arr));int num = (int)(Math.random()*20)+1;//随机数字System.out.println("数字是"+num);//我要的是明显的结果if(exist(arr,num) == true){System.out.println("数组中存在"+num);}else{System.out.println("数组中不存在"+num);}}
}

在这里插入图片描述
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式简述(一)
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动
  • Java实战中如何使用多线程(线程池)及其为什么使用?
  • 科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践
  • 理解 Objective-C 中 `+load` 方法的执行顺序
  • 【大模型基础】4.1 数据挖掘(待)
  • Xubuntu22.04 终端命令调用图形设置工具
  • 化腐朽为神奇!揭开ISP图像处理的神秘面纱,基于瑞芯微RK3568J工业平台!
  • Domainim:一款高效的企业级网络安全扫描工具
  • gitee设置ssh公钥密码频繁密码验证
  • 【spring boot】初学者项目快速练手
  • 攻防世界 re新手模式
  • 分层评估的艺术:sklearn中的策略与实践
  • jenkins面试题全集
  • 前端经验:使用sheetjs导出CSV文本为excel
  • HTML中设置input等文本框为不可操作
  • Java新版本的开发已正式进入轨道,版本号18.3
  • spark本地环境的搭建到运行第一个spark程序
  • 巧用 TypeScript (一)
  • 追踪解析 FutureTask 源码
  • zabbix3.2监控linux磁盘IO
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ###C语言程序设计-----C语言学习(6)#
  • #pragma multi_compile #pragma shader_feature
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (2)(2.10) LTM telemetry
  • (5)STL算法之复制
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (day6) 319. 灯泡开关
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (七)Flink Watermark
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)基于IDEA的JAVA基础12
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Linq学习笔记
  • .NET Framework 3.5安装教程
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET成年了,然后呢?
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • @hook扩展分析
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [Apio2012]dispatching 左偏树