JAVA-数组查找元素

无序数组查找元素

循环遍历查找

通过对无序数组进行遍历,将数组中的每个元素与指定元素比较,从而确定该数组中是否存在指定元素。

字符串数组

	public static void main(String[] args) {String[] arr= {"Megatron","s司马铁锤","Laden","angelbaby","b比尔盖茨","1林平之","BIGBAM"};String target="s司马铁锤";int index=-1;for(int i=0,k=arr.length-1;i<arr.length;i++,k--) {if(arr[i].equals(target)) {index=i;break;}if(arr[k].equals(target)) {index=k;break;}}}

整型数组 

public class demo01 {public static void main(String[] args) {int[] array= {23,34,45,36,27,38,58,67,78,58,39};int target=36;//目标元素int index=-1;//目标元素下标,设置初始下标为-1,代表不存在//遍历查找for(int i=0;i<array.length;i++) {if(array[i]==target) {index=i;break;}}System.out.printf("目标元素%d在数组中的下标为%d",target,index);}
}

  字符数组

public class demo02 {public static void main(String[] args) {char[] a= {'a','b','c','d','e','f','g'};		char target='d';//目标元素int index=-1;//目标元素下标,设置初始下标为-1,代表不存在//遍历查找for(int i=0;i<a.length;i++) {if(a[i]==target) {index=i;break;}}System.out.printf("目标元素%s在数组中的下标为%d",target,index);}
}

 双指针遍历查找

双指针遍历的方式进行查找:通过两个下标,分别从数组头部和尾部,同时对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。

字符串数组

public class demo01 {public static void main(String[] args) {String[] array= {"Megatron","s司马铁锤","Laden","angelbaby","b比尔盖茨","1林平之","BIGBAM"};String target="s司马铁锤";int index=-1;//目标元素下标,设置初始下标为-1,代表不存在//双指针查找for(int i=0,k=array.length-1;i<=k;i++,k--) {if(array[i].equals(target)) {index=i;break;}if(array[k].equals(target)) {index=k;break;}}System.out.printf("目标元素%s在数组中的下标为%d",target,index);}
}

整型数组

public class demo01 {public static void main(String[] args) {int[] array= {23,34,45,36,27,38,58,67,78,58,39};int target=36;//目标元素int index=-1;//目标元素下标,设置初始下标为-1,代表不存在//双指针查找for(int i=0,k=array.length-1;i<=k;i++,k--) {if(array[i]==target) {index=i;break;}if(array[k]==target) {index=k;break;}}System.out.printf("目标元素%d在数组中的下标为%d",target,index);}
}

 字符数组

public class demo02 {public static void main(String[] args) {char[] a= {'a','b','c','d','e','f','g'};		char target='d';//目标元素int index=-1;//目标元素下标,设置初始下标为-1,代表不存在//双指针查找for(int i=0,k=a.length-1;i<=k;i++,k--) {if(a[i]==target) {index=i;break;}if(a[k]==target) {index=k;break;}}System.out.printf("目标元素%s在数组中的下标为%d",target,index);}
}

Arrays工具类的binarysearch()方法

通过调用Arrays.binarysearch方法,进行查找:由于该方法是基于二分查找方法实现,数组必须处于有序状态。所以,需要先对数组进行排序,再通过Arrays.binarysearch进行查找。

import java.util.Arrays;
public class e15 {//查找目标元素public static void main(String[] args) {int[] arr= {11,34,23,25,5,6,57};System.out.println("请输出一个数字");int target=23;//先使用Arrays工具类的sort方法排序Arrays.sort(arr);//再用Arrays工具类的binarySearch查找int index=Arrays.binarySearch(arr, target);System.out.printf("目标元素%d在数组中的下标为%d",target,index);}
}

有序数组查找元素 

二分查找元素

 二分查找思路分析

  1. 对数组进行排序,进行二分查找的数组必须是有序数组
  2. 判断中间下标元素是否与目标元素相等,若相等,直接退出
  3. 若不相等,则继续比较中间下标元素与目标元素         
  •    若中间下标元素小于目标元素,则首元素下标变为中间下标+1 ,即将当前数组的后半部分当作新的搜索数组,因为前半部分的所有元素都小于目标元素,全部排除
  •    若中间下标元素大于目标元素,尾元素下标变为中间下标-1,即将当前数组的前半部分当作新的搜索数组,因为后半部分的所有元素都大于目标元素,全部排除  

     4.在新的搜索数组上,重新开始第2步的判断  

整型数组 

import java.util.Arrays;
public class e15 {public static void main(String[] args) {//二分查找int[] numbers= {3,124,33,12,23,45,34,16,37,48};int target=12;  //目标元素int index=-1;   //初始目标元素下标,-1默认不存在//对数组进行排序Arrays.sort(numbers);System.out.println(Arrays.toString(numbers));//排序后的数组//定义初始首下表和尾下表int low=0;int high=numbers.length-1;while(low<=high) {int mid=(low+high)/2;  //计算中间下标if(numbers[mid]==target) { //如果中间下标元素等于目标元素,直接退出index=mid;break;}else if(numbers[mid]<target) { //如果中间下标元素小于目标元素,首元素下标变为中间下标+1low=mid+1;index=mid;}else if(numbers[mid]>target) { //如果中间下标元素大于目标元素,尾元素下标变为中间下标-1high=mid-1;index=mid;}}System.out.println("目标元素在数组中的下标位置:"+index);	}
}

字符数组 

public class R17 {public static void main(String[] args) {char[] a= {'a','b','c','d','e','f','g'};int low=0;int high=a.length;int index=-1;int target='e';while(low<=high) {int mid= (low+high)/2;if(a[mid]==target) {index=mid;break;}else if(a[mid]<target) {low=mid+1;}else if(a[mid]>target) {high=mid-1;}}System.out.println(index);}
}

 

二分查找的效率很高,是因为它在匹配不成功的时候,每次都能排除剩余元素中一半的元素。因此可能包含目标元素的有效范围就收缩的很快,而不像遍历查找那样,每次仅能排除一个元素。 

小结

  1. 查找元素可以分为两种情况:有序数组和无序数组
  2. 无序数组可以通过遍历数组或Arrays工具类两种方式查找指定元素
  3. 有序数组可以通过二分查找

 

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

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

相关文章

HiveSQL——设计一张最近180天的注册、活跃留存表

0 问题描述 现有一个用户活跃表user_active(user_id,active_date)、 用户注册表user_regist(user_id,regist_date)&#xff0c;表中分区字段都为dt(yyyy-MM-dd)&#xff0c;用户字段均为user_id; 设计一张 1-180天的注册活跃留存表&#xff1b;表结构如下&#xff1a; 1 数据分…

ctfshow-php特性(web102-web115)

目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…

controller-manager学习三部曲之二:源码学习

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 作为《controller-manager学习三部曲》系列的第二篇&#xff0c;前面通过shell脚本找到了程序的入口&#xff0c;接下来咱们来学习controller-mana…

c入门第十一篇——物以类聚(数组)

我&#xff1a;“师弟&#xff0c;看你在发呆&#xff0c;怎么了&#xff1f;” 师弟&#xff1a;“师兄&#xff0c;我喜欢的那个女生给我出了一道题。题目是输入班上学生的成绩&#xff0c;并对学生成绩排序&#xff0c;我在想怎么做。” 我&#xff1a;“哦&#xff1f;这个…

一文彻底搞懂布隆过滤器

文章目录 1. 基本原理2. 布隆过滤器的优点3. 布隆过滤器的缺点4. 布隆过滤器的应用场景 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间高效的概率数据结构&#xff0c;用于判断一个元素是否在一个集合中。它使用位数组和一系列哈希函数来实现。 1. 基本原理 首先…

IP和ARP相关问题

1.IP协议的作用&#xff1f; IP协议属于网络层的协议&#xff0c;主要作用是定义数据包的格式&#xff0c;对数据包进行路由和寻址&#xff0c;以便它们可以跨网络传播并到达正确的目的地。目前的IP协议分为两种&#xff0c;分为IPv4和IPv6。 2.IPv4和IPv6的区别&#xff1f;…

综合例题及补充

目录 查询员工的编号、姓名、雇佣日期&#xff0c;以及计算出每一位员工到今天为止被雇佣的年数、月数、天数 计算出年 计算月 计算天数 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 查询员工的编号、姓名、雇佣日期&#xff0c…

项目排期 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 项目组共有N个开发人员&#xff0c;项目经理接到了M个独立的需求&#xff0c;每个需求的工作量不同&#xff0c;且每个需求只能由一个开发人员独立完成&#xff0…

Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)

文章目录 题面链接题意题解代码总结 题面 链接 C. Kefa and Park 题意 求叶节点数量&#xff0c;叶节点满足&#xff0c;从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现&#xff0c;当不满足条件时直接返回。 到达叶节点后统计答案&#xff0c;用…

机器学习:卷积介绍及代码实现卷积操作

传统卷积运算是将卷积核以滑动窗口的方式在输入图上滑动&#xff0c;当前窗口内对应元素相乘然后求和得到结果&#xff0c;一个窗口一个结果。相乘然后求和恰好也是向量内积的计算方式&#xff0c;所以可以将每个窗口内的元素拉成向量&#xff0c;通过向量内积进行运算&#xf…

游泳耳机怎么选?四大口碑最好游泳耳机推荐

在挑选适合游泳的耳机时&#xff0c;选择合适的产品至关重要。游泳不仅是一项身体锻炼&#xff0c;更是一种享受。佩戴耳机能够为游泳者提供更加愉悦的体验&#xff0c;但确保所选耳机符合水中使用的要求至关重要。 传统的有线耳机和非防水设计的蓝牙耳机并不适合水中使用&…

MongoDB聚合:$listSearchIndexes

$listSearchIndexes返回指定集合现有Atlas Search索引的信息。 **重要&#xff1a;**该命令只能在托管的MongoDB Allas&#xff0c;并且要求群集层级至少为M10。 语法 db.<collection>.aggregate([{$listSearchIndexes:{id: <indexId>,name: <indexName>}…

Codeforces Round 923 (Div. 3) C. Choose the Different Ones(Java)

比赛链接&#xff1a;Round 923 (Div. 3) C题传送门&#xff1a;C. Choose the Different Ones! 题目&#xff1a; ** Example** ** input** 6 6 5 6 2 3 8 5 6 5 1 3 4 10 5 6 5 6 2 3 4 5 6 5 1 3 8 10 3 3 3 4 1 3 5 2 4 6 2 5 4 1 4 7 3 4 4 2 1 4 2 2 6 4 4 2 1 5 2 3 …

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…

四、OpenAI之文本生成模型

文本生成模型 OpenAI的文本生成模型(也叫做生成预训练的转换器(Generative pre-trained transformers)或大语言模型)已经被训练成可以理解自然语言、代码和图片的模型。模型提供文本的输出作为输入的响应。对这些模型的输入内容也被称作“提示词”。设计提示词的本质是你如何对…

JS游戏项目合集【附源码】

文章目录 一&#xff1a;迷宫小游戏二&#xff1a;俄罗斯方块三&#xff1a;压扁小鸟 一&#xff1a;迷宫小游戏 【迷宫游戏】是一款基于HTML5技术开发的游戏&#xff0c;玩法简单。玩家需要在一个迷宫中找到出口并成功逃脱&#xff0c;本项目还有自动寻路&#xff08;Track&a…

Python包管理器

文章目录 写在前面的话 切换安装源 查看包 检索包 安装特定的包 升级包 卸载包 生成冻结包 三方包的命名规则 写在后面的话 References 写在前面的话 在本章节中&#xff0c;我们介绍一下python最常用的一个包管理工具pip 一般来说下载我们python 的运行环境的时候在安装的时候…

Kubernetes构建Docker镜像部署jar包

Kubernetes构建Docker镜像部署jar包 Kubernetes是一个开源的容器编排引擎,它可以自动化地部署、扩展和管理容器化的应用程序。Docker镜像是一种轻量级、可移植的容器化应用程序打包格式,它可以在任何地方运行,而不需要额外的配置。 首先,需要准备一个基本的Dockerfile,它…

监测Nginx访问日志502情况后并做相应动作

今天带大家写一个比较实用的脚本哈 原理&#xff1a; 假设服务器环境为lnmp&#xff0c;近期访问经常出现502现象&#xff0c;且502错误在重启php-fpm服务后消失&#xff0c;因此需要编写监控脚本&#xff0c;一旦出现502&#xff0c;则自动重启php-fpm服务 场景&#xff1a; 1…

操作系统-程序员的自我修养

一、温故而知新 所有的应用程序都以进程process的方式运行在比操作系统权限更低的级别&#xff0c;每个进程都投自己独立的地址空间&#xff0c;使得进程之间的地址空间相互隔离。 抢占式CPU分配方式&#xff1a;操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程…