Java数组查找

数组查找

        • 1.线性查找(遍历查询)
        • 2.二分查询
          • 算法步骤
          • 注意事项
          • Java 代码示例
          • 时间复杂度

1.线性查找(遍历查询)

就是完全遍历数组,寻找要找的元素

int [] arr = {10,6,8,9,2,3,};int num = 8;for(int i = 0;i<arr.length-1;i++){ //遍历数组if(arr[i]== num){System.out.println("寻找到了,下标为:"+i);}}
2.二分查询

二分法查找(Binary Search)是一种高效的查找算法,它只适用于有序数组。其基本思想是不断将数组分成两半并与目标值进行比较。具体步骤如下:

算法步骤
  1. 首先确定数组的中间位置 mid = (satrt + end) / 2
  2. mid 位置的值与目标值比较:
    • 如果中间位置的值等于目标值,则查找成功,返回中间位置的索引。
    • 如果中间位置的值小于目标值,则目标值必定在数组右半部分,因此将查找范围缩小为 mid + 1 到 end。
    • 如果中间位置的值大于目标值,则目标值必定在数组左半部分,因此将查找范围缩小为 start 到 mid - 1
  3. 重复以上步骤,直到找到目标值或者查找范围为空(start > end),此时表示找不到目标值。
注意事项
  • 二分法查找只适用于已排序的数组。
  • 在计算中间位置时,如果 start 和 end 很大,直接相加可能会导致整数溢出。为了避免这个问题,可以使用 mid = start + (end - start) / 2
Java 代码示例

以下是使用二分法查找的Java代码示例:

import java.util.Arrays;
public class BinarySearch {public static void main(String[] args) {int[] arr = {2, 5, 8,23, 12, 16, 56, 72,38, 91};int target = 23;Arrays.sort(arr); //Arrays工具类,对数组进行排序int result = binarySearch(arr, target);if (result != -1) {System.out.println("目标值 " + target + " 在数组中的索引是 " + result);} else {System.out.println("数组中没有找到目标值 " + target);}}public static int binarySearch(int[] arr, int target) {int start = 0;int end = arr.length - 1;while (start <= end) {int mid = low + (end - start) / 2;if (arr[mid] == target) {return mid; // 找到目标值,返回索引} else if (arr[mid] < target) {start = mid + 1; // 目标值在右半部分} else {end = mid - 1; // 目标值在左半部分}}return -1; // 没有找到目标值}}
时间复杂度
  • 最好情况:O(1)
  • 最坏情况:O(log n)
  • 平均情况:O(log n)

由于二分法查找每次查找都会将查找范围减半,所以它的时间复杂度是对数级的,这使得它非常高效,特别是对于大型数据集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Matlab生成txt文件导入到Vivado仿真

Matlab处理数据并将其写入txt文件 %% Txt Generate pre_RS_datadec2bin(simDataIn,8); %将数据转化为8bit的二进制 fidfopen("F:\FPGA\Xilinx_vivado\project\dvbstestbench\dbvs\matlab\pre_RS_data.txt","wt"); for i1:n*nMessages %数据…

【笔试题汇总】华为春招笔试题题解 2024-4-24

这里是paoxiaomo&#xff0c;一个现役ACMer&#xff0c;之后将会持续更新算法笔记系列以及笔试题题解系列 本文章面向想打ICPC/蓝桥杯/天梯赛等程序设计竞赛&#xff0c;以及各个大厂笔试的选手 感谢大家的订阅➕ 和 喜欢&#x1f497; 有什么想看的算法专题可以私信博主 &…

Docker Registry私有仓库详解

引言 在Docker生态系统中&#xff0c;容器镜像的管理至关重要。Docker公共仓库&#xff08;如Docker Hub&#xff09;为开发者提供了便捷的镜像托管服务&#xff0c;但出于安全、隐私及网络性能的考虑&#xff0c;许多企业和组织更倾向于搭建自己的Docker私有仓库。本文将详细探…

Ubuntu C++ man手册安装及使用

Ubuntu下C++ man手册安装 C++在线文档: http://www.cplusplus.com/reference/ 第一种办法:使用cppman $ sudo apt install cppman 使用方法 第二种办法: 打开网页:GCC mirror sites- GNU Project 点击下图中的突显行链接: Russia, Novosibirsk:

Spring:SpringBoot项目中忽略某属性返回给前端

文章目录 一、忽略实体类中的属性1、JsonIgnore2、JSONField(serialize false)3、JsonInclude 二、忽略实体类中的方法返回值 一、忽略实体类中的属性 1、JsonIgnore JsonIgnore注解是Jackson库中的一个注解&#xff0c;用于在实体类向前台返回数据时忽略不想传递给前台的属…

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例 引言1. UniMRCP和UmcFramework简介2. 准备工作3. unimrcpclient.xml配置文件3.1 定义SIP设置3.2 定义MRCP会话配置文件 4. C代码示例5. 测试和验证6. 故障排查7. 结论8. 参考文献 引言 在多媒体通信…

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本&#xff1a;7.3/7.2&#xff08;测试时我用的7.2要安装sg扩展 &#xff09; 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

微服务之SpringCloud AlibabaSeata处理分布式事务

一、概述 1.1背景 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用&#xff0c;就会产生分布式事务问题 but 关系型数据库提供的能力是基于单机事务的&#xff0c;一旦遇到分布式事务场景&#xff0c;就需要通过更多其他技术手段来解决问题。 全局事务&#xff1a;…

蓝桥杯单片机之模块代码《秒表》

文章目录 定时器/计数器1.工作原理2.总代码 省赛代码传送门 定时器/计数器 1.工作原理 定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数&#xff0c;当计数值达到设定要求时&#xff0c;向CPU提出中断请求&#xff0c;从而实现定时或计数功能的外设。定时器的…

使用 Lua 协程模拟 Golang 的 go defer 编程模式

封装 go 函数 在 使用 Lua 协程处理异步回调函数 中已经介绍 这里简要列下&#xff1a; 封装 go 函数---go 函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建的协程是暂停的…

【论文阅读】ChipNeMo中的数据集处理

前面总体学习了《ChipNeMo: Domain-Adapted LLMs for Chip Design》&#xff0c;然后又继续仔细看了论文中的领域适配分词和领域数据微调的预训练检索模型&#xff0c;对于数据集的处理&#xff0c;也需要仔细看一下。 提炼重点&#xff1a;1&#xff09;对于数据集&#xff0…

Golang中的Json标签(持续更新...)

目录 字段标签对应表 字段标签对应表 在Go语言中&#xff0c;结构体&#xff08;struct&#xff09;的字段标签&#xff08;Field Tags&#xff09;通常用于为字段提供额外的元数据&#xff0c;这些元数据可以由反射&#xff08;reflect 包&#xff09;或其他库&#xff08;如…

第1篇:创建Platform Designer系统

Q&#xff1a;本期我们开始使用Platform Designer工具创建带IP核的FPGA自定义硬件系统。 A&#xff1a;Platform Designer是集成在Quartus软件里的系统设计工具&#xff0c;名称随着Quartus的不断更新曾命名为SOPC Builder和Qsys。 使用Platform Designer可以添加Quartus已有自…

安卓数据库SQLite

目录 一、SQLite数据库二、SQLiteOpenHelper和SQLiteDatabase2.1 SQLiteOpenHelper2.2 SQLiteDatabase 三、常见数据库使用介绍3.1 创建数据库3.2 插入数据3.3 修改数据&#xff08;升级数据库&#xff09;3.4 删除数据3.5 查询数据3.6 关闭数据库3.7 删除数据库 一、SQLite数据…

基于uniapp vue3.0 uView 做一个点单页面(包括加入购物车动画和左右联动)

1、实现效果&#xff1a; 下拉有自定义组件&#xff08;商品卡片、进步器、侧边栏等&#xff09;源码 2、左右联动功能 使用scroll-view来做右边的菜单页&#xff0c;title的id动态绑定充当锚点 <scroll-view :scroll-into-view"toView" scroll-with-animation…

OSPF基本配置

原理概述 OSPF 是一种应用非常广泛的基于链路状态的动态路由协议&#xff0c;它具有区域&#xff08; Area )化的层次结构&#xff0c;扩展性好&#xff0c;收敛速度快&#xff0c;适合部署在各种规模的网络上。 在 OSPF 中&#xff0c;每台路由器都必须有一个 Router-I…

Centos 安装python3.12.3

下载python3.12.3 https://www.python.org/downloads/release/python-3123/ 安装 yum -y install gcc zlib zlib-devel libffi libffi-devel yum install readline-devel yum install bzip2-devel yum install epel-release yum install openssl-devel export CFLAGS$(pkg-c…

仓储机器人确实蛮卷的~

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 视频来源于Agilox。 仓储机器人&#xff0c;无疑是现代物流业的一大亮点。它们小巧灵活&#xff0c;却能承担起繁重…

CentOS-Stream-9添加删除账户

添加普通用户&#xff0c;既可以登录系统&#xff0c;也可以访问服务 useradd -s /bin/bash -m abc 添加abc用户&#xff0c;自动创建目录。 passwd abc 设置用户密码 添加不能登录系统的用户&#xff0c;可以访问ftp服务 vim /etc/shells&#xff0c;在其中添加一行/sbin/…