算法通关:006_1二分查找
二分查找
- 查找一个数组里面是否存在num
- 主要代码
- 运行结果
- 详细写法
- 自动生成数组和num,利用对数器查看二分代码是否正确
查找一个数组里面是否存在num
主要代码
/*** @Author: ggdpzhk* @CreateTime: 2024-07-27*/
public class cg {//二分查找public static boolean exist(int[] arr,int num){if(arr == null || arr.length == 0){return false;}int l = 0;int r = arr.length -1;while(l <= r){int m = l + ((r-l)>>2);if(num == arr[m]){return true;}else if (arr[m] < num){l = m + 1;}else{r = m - 1;}}return true;}public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9};int num = 10;if(exist(arr,num)){System.out.println("数组中存在"+num);}else{System.out.println("数组中不存在"+num);}}
}
运行结果

详细写法
自动生成数组和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);}}
}


相关文章:
算法通关:006_1二分查找
二分查找 查找一个数组里面是否存在num主要代码运行结果 详细写法自动生成数组和num,利用对数器查看二分代码是否正确 查找一个数组里面是否存在num 主要代码 /*** Author: ggdpzhk* CreateTime: 2024-07-27*/ public class cg {//二分查找public static boolean …...
总结一些vue3小知识3
总结一些vue3小知识1:http://t.csdnimg.cn/C5vER 总结一些vue3小知识2:http://t.csdnimg.cn/sscid 1.限制时间选择器只能选择后面的日期 说明:disabled-date属性是一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参…...
JAVAWeb实战(前端篇)
项目实战一 0.项目结构 1.创建vue3项目,并导入所需的依赖 npm install vue-router npm install axios npm install pinia npm install vue 2.定义路由,axios,pinia相关的对象 文件(.js) 2.1路由(.js) import {cre…...
axios请求大全
本文讲解axios封装方式以及针对各种后台接口的请求方式 axios的介绍和基础配置可以看这个文档: 起步 | Axios中文文档 | Axios中文网 axios的封装 axios封装的重点有三个,一是设置全局config,比如请求的基础路径,超时时间等,第二点是在每次…...
C# 简单的单元测试
文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果,通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试…...
Linux中Mysql5.7主从架构(一主多从)配置教程
🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…...
BACnet物联网关BL103:Modbus协议转BACnet/MSTP
随着物联网技术在楼宇自动化与暖通控制系统中的迅猛发展,构建一种既经济高效又高度可靠的协议转换物联网关成为了不可或缺的核心硬件组件。在此背景下,我们钡铼特别推荐一款主流的BAS(楼宇自动化系统)与BACnet物联网关——BL103&a…...
Go 语言条件变量 Cond
1.Cond 的使用方法 Go 标准库提供 Cond 同步原语的目的是为等待/通知场景下的并发操作提供支持。Cond 通常用于等待某个条件的一组 goroutine,当条件变为 true 时,其中一个或者所有的 goroutine 会被唤醒执行。 Cond 与某个条件相关,这个条件需要一组 goroutine 协作达到。当这…...
PostgreSQL 中如何重置序列值:将自增 ID 设定为特定值开始
我是从excel中将数据导入,然后再通过sql插入数据,就报错。 需要设置自增ID开始值 1、确定序列名称: 首先,需要找到与的增字段相关的序列名称。假设表名是 my_table 和自增字段是 id,可以使用以下查询来获取序列名称…...
Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示
Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 目录 Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 一、简单介绍 二、共享纹理 1、共享纹理的原理 2、共享纹理涉及到的关键知识点 3、什么可以实现共享 不能实现共享…...
Go语言的数据结构
数据结构 数组 支持多维数组,属于值类型,支持range遍历 例子:随机生成长度为10整数数组 package main import ("fmt""math/rand" ) // 赋值 随机获取100以内的整数 func RandomArrays() {var array [10]int //声明var…...
python_在sqlite中创建表并写入表头
python_在sqlite中创建表并写入表头 import sqlite3def write_title_to_sqlite(tableName,titleList,dataTypeGroupsList,database_path):conn sqlite3.connect(database_path)# 创建游标cursor conn.cursor()#MEMO 长文本#create_table_bodycreate_table_body "序号 …...
1.c#(winform)编程环境安装
目录 安装vs创建应用帮助查看器安装与使用( msdn) 安装vs 安装什么版本看个人心情,或者公司开发需求需要 而本栏全程使用vs2022进行开发c#,着重讲解winform桌面应用开发 使用***.net framework***开发 那先去官网安装企业版的vs…...
图中的最短环
2608. 图中的最短环 现有一个含 n 个顶点的 双向 图,每个顶点按从 0 到 n - 1 标记。图中的边由二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和 vi 之间存在一条边。每对顶点最多通过一条边连接,并且不存在与自身相连的顶…...
安装依赖 npm install idealTree:lib: sill idealTree buildDeps 卡着不动
我一直怀疑是网络问题,因为等了很久也能安装成功,就是时间比较长,直到现在完全受不了了,决定好好整治下这个问题! 1、执行命令 npm config get userconfig 查看配置文件所在位置,将其删除。 2、执行 n…...
LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略 导读:2024年7月23日,Meta重磅推出Llama 3.1。本篇文章主要提到了Meta推出的Llama 3.1自然语言生成模型。 背景和痛点 >> 过去开源的大型语言模型在能力和性能上一…...
如何实现一个大模型在回答问题时同时提供相关内容链接
通义生成 为了让大模型在回答问题时能够提供相关内容链接,通常采用的方法是结合检索增强生成(Retrieval-Augmented Generation, RAG)的技术。这种方法可以让大模型在生成答案的同时,从外部知识源中检索相关信息,并将这…...
<数据集>玉米地杂草识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:9900张 标注数量(xml文件个数):9900 标注数量(txt文件个数):9900 标注类别数:2 标注类别名称:[Maize, Weed] 序号类别名称图片数框数1Maize8439125142Weed959231048…...
vue3中动态添加form表单校验
<template><div><div v-for"(formData, index) in forms" :key"index"><u-form :model"formData" :rules"rules" ref"formRefs"><u-form-item label"用户名" prop"username"…...
Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?
什么是声明式事务管理,spring怎么实现声明式事务管理? 声明式事务管理是一种编程范式,它允许开发人员通过声明性的配置或注解,而不是硬编码事务处理逻辑,来指定哪些方法或类应该在其上下文中执行事务。这种方法将事务…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
