常见算法(1)

1.基本查找/顺序查找

核心:从0索引之后挨个查找

实现代码:

public class test {
		public static void main(String [] arg) throws ParseException  {
		  int[] arr= {121,85,46,15,55,77,63,49};
		  int number=55;
		  System.out.println(bashi(arr,number));
		}
		public static boolean bashi(int []arr,int number) {
			for(int i=0;i<arr.length;i++) {
				if(number==arr[i]) {
					return true;
				}
			}
			return false;
		}
}

查找某个数据的索引,若考虑数据重复问题,则需要使用集合,将数据索引放入集合中。

public class test {
		public static void main(String [] arg) throws ParseException  {
			//返回数据的索引,需要考虑数据重复问题
		  int[] arr= {121,85,46,15,55,77,63,49,55};
		  int number=55;
		  System.out.println(bashi(arr,number));
		}
		public static ArrayList<Integer> bashi(int []arr, int number) {
			ArrayList<Integer> list=new ArrayList();
			for(int i=0;i<arr.length;i++) {
				if(number==arr[i]) {
					list.add(i);
				}
			}
			return list;
		}
}

2.二分查找

前提条件:数组中的数据必须是有序的

核心:每次排除一半的查找范围

定义min、max、mid

若查找元素在mid左边,min不变,max=mid-1;

若查找元素在mid右边,max不变,min=mid+1;

实现代码:

public class test {
		public static void main(String [] arg) throws ParseException  {
		  int[] arr= {12,35,46,62,88,97,150};
		  int number=88;
		  System.out.println(binary(arr,number));
		}
		public static int binary(int []arr, int number) {
			int min=0;
			int max=arr.length-1;
			while(true) {
				if(min>max) {
					return -1;
				}
				int mid=(min+max)/2;
				if(arr[mid]<number) {
					min=mid+1;
				}else if(arr[mid]>number) {
					max=mid-1;
				}else {
					return mid;
				}
			}
		}
}

3.分块查找

原则:1.前一块中的最大数据,小于后一块中的所有数据;2.块数数量一般等于这个数字的个数开根号。

核心:先确定查找的是那一块,然后在块内挨个查找

分析:

先创建一个Block类,有max(最大值),startindex(起始索引),endindex(结束索引);

再创建一个block数组,存放创建的对象;

定义方法查找元素下标,还有一个方法查找元素在哪一块:遍历block数组,查找最大值小于元素的块(下标)。得到哪一块,获取起始索引,遍历,在arr中查找元素下标。

public class test {
		public static void main(String [] arg)   {
		  int[] arr= {16,5,9,12,21,18,
				     32,23,37,26,45,34,
				     50,48,61,52,73,66};
		  
		  //分块查找:
		  //建立一个Block类
		  //创建Blockarr数组,存放每个对象的信息
		  //先查找元素是那一层的
		  //再遍历这一层查找元素索引
		  
		  Block b1=new Block(21,0,5); //创建对象
		  Block b2=new Block(45,6,11);
		  Block b3=new Block(66,12,17);
		  //定义一个数组管理三个块
		  Block []block= {b1,b2,b3};
		  System.out.println(find(block,arr,61));
		
		}
		public static int find(Block []block,int[] arr,int number) { 
			int index=ceng(block,number);//查到在哪一层
			if(index==-1) {
				return -1;
			}
			//获取这一层的起始和结束索引
			int startindex=block[index].getStart();
			int endindex=block[index].getEnd();
			//遍历arr
			for(int i=startindex;i<endindex;i++) {
				if(arr[i]==number) {
					return i;
				}
			}
			return -1;
		}
		//查找元素在那一层
		public static int ceng(Block []block,int number) {
			for(int i=0;i<block.length;i++) {
				if(block[i].getMax()>=number) {
					return i;
				}
			}
			return -1;
		}
}
class Block{
	private int max;//每层的最大值
	private int start;//起始索引
	private int end;//结束索引
	public Block() {
		
	}
	public Block(int max,int start,int end) {
		this.setMax(max);
		this.setStart(start);
		this.setEnd(end);
	}
	public int getMax() {
		return max;
	}
	public void setMax(int max) {
		this.max = max;
	}
	public int getStart() {
		return start;
	}
	public void setStart(int start) {
		this.start = start;
	}
	public int getEnd() {
		return end;
	}
	public void setEnd(int end) {
		this.end = end;
	}
	
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三分钟学会视频号卖货,真的太简单了!

大家好&#xff0c;我是电商糖果 视频号小店绝对是今年最火的电商平台之一&#xff0c;再加上它刚进军电商行业&#xff0c;大家都想吃到第一口红利。 小店之所以这么受欢迎&#xff0c;其实看中是它背后微信的十几亿真实用户。 微信的流量可以直接进入视频号&#xff0c;因…

企业知识库智能问答系统的实践

1、页面效果 PC端 2、页面效果 手机端 3、主要支持功能 新建会话 历史会话 2、智能问答 支持 文本分类和意图识别&#xff0c;支持基于大模型的对话理解&#xff0c;支持流式对话 3、支持手机端 语音识别 4、主要服务包括 向量库Milvus 向量计算和文本分类服务 …

618必入好物清单!五款人气实用好物推荐

朋友们&#xff01;一年一度的618购物狂欢节又要来啦&#xff01;是不是已经迫不及待想要给自己的购物车添点新货了&#xff1f;小编特地搜罗了五款人气爆棚、实用到没朋友的“必入好物”。从日常生活小物到提升生活品质的利器&#xff0c;精挑细选保证买得开心、用得顺心。赶紧…

ROS | 自定义发布地图

C代码&#xff1a; Step: Python代码:

[实例] Unity Shader 逐像素漫反射与半兰伯特光照

漫反射光照是Unity中最基本最简单的光照模型&#xff0c;本篇将会介绍在片元着色器中实现反射效果&#xff0c;并会采用半兰伯特光照技术对其进行改进。 1. 逐顶点光照与逐像素光照 在Unity Shader中&#xff0c;我们可以有两个地方可以用来计算光照&#xff1a;在顶点着色器…

QT控件QDialog结合QDialogButtonBox实现确认弹窗

项目需要二次确认开启&#xff0c;添加一个确认弹窗&#xff0c;采用QDialog并添加按钮控件。 QDialogButtonBox控件用于添加按钮组&#xff0c;初始化时可以增加标准按键&#xff0c;但是不能自定义按钮文字。 想要更改按键大小&#xff0c;但是没有提供设置组内按钮大小的函数…

创建型模式之单例

文章目录 概述定义场景小结 概述 设计模式包括创建型模式&#xff0c;结构型模式&#xff0c;行为型模式。 今天先看看创建型模式&#xff0c;而单例是创建型模式中的第一个而且是常用的&#xff0c;就从它开始吧。 定义 单例模式用来创建全局唯一的对象。一个类只允许创建一…

5.23 学习总结

一.项目优化&#xff08;语音通话&#xff09; 实现步骤&#xff1a; 1.用户发送通话申请&#xff0c;并处理通话请求&#xff0c;如果同意&#xff0c;为两个用户之间进行连接。 2.获取到电脑的麦克风和扬声器&#xff0c;将获取到的语音信息转换成以字节数组的形式传递。 …

小林coding笔记

MySQL执行流程 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层。Server 层负责建立连接、分析和执行 SQL。存储引擎层负责数据的存储和提取。 Mysql执行 启动Mysql net start mysql登陆 mysql -u root -p输入密码

C++之单链表与双链表逆序实例(二百七十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

17款奔驰GLS450升级头等舱行政独立四座马鞍是什么样体验

五座版本&#xff1a;迈巴赫GLS480的五座版本通常指的是具有五个座位的配置&#xff0c;包括两个前排座椅和三个后排座椅。这种配置适合搭载更多乘客&#xff0c;后排座椅通常为三人座设计&#xff0c;乘坐人数较多。 四座版本&#xff1a;迈巴赫GLS480的四座版本通常指的是具…

正点原子LWIP学习笔记(二)MAC简介

MAC简介 一、MAC简介&#xff08;了解&#xff09;二级目录三级目录 二、ST的ETH框架&#xff08;了解&#xff09;三、SMI站管理接口&#xff08;熟悉&#xff09;四、介质接口MII、RMII&#xff08;熟悉&#xff09; 一、MAC简介&#xff08;了解&#xff09; STM32 的 MAC …

c++笔记3

优先队列 普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除。优先队列是一种按照优先级决定出队顺序的数据结构&#xff0c;优先队列中的每个元素被赋予级别&#xff0c;队首元素的优先级最高。 例如&#xff1a;4入队&#xff0c…

Python筑基之旅-MySQL数据库(一)

目录 一、MySQL数据库 1、简介 2、优点 2-1、开源和免费 2-2、高性能 2-3、可扩展性 2-4、易用性 2-5、灵活性 2-6、安全性和稳定性 2-7、丰富的功能 2-8、结合其他工具和服务 2-9、良好的兼容性和移植性 3、缺点 3-1、对大数据的支持有限 3-2、缺乏全文…

Windows系统安装OpenSSH使用VScode远程连接内网Linux服务器开发

文章目录 &#x1f4a1;推荐 前言1、安装OpenSSH2、VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网…

threejs的基本属性

1.创建场景,摄像机,渲染器,几何体,材质,网格 网格 物体材质 场景.add(网格),网格加入场景中 场景.add(坐标辅助器) 渲染 场景摄像机 相机的轨道控制器是个单独的对象 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/j…

【重学C++】02 脱离指针陷阱:深入浅出 C++ 智能指针

前言 大家好&#xff0c;今天是【重学C】系列的第二讲&#xff0c;我们来聊聊C的智能指针。 为什么需要智能指针 在上一讲《01 C如何进行内存资源管理》中&#xff0c;提到了对于堆上的内存资源&#xff0c;需要我们手动分配和释放。管理这些资源是个技术活&#xff0c;一不…

新媒体运营十大能力,让品牌闻达天下!

" 现在新媒体蓬勃发展&#xff0c;很多品牌都有新媒体运营这个岗位。新媒体运营好的话&#xff0c;可以提高公司品牌曝光、影响力。那新媒体运营具备什么能力&#xff0c;才能让品牌知名度如虎添翼呢&#xff1f;" 信息收集能力 在移动互联网时代&#xff0c;信息的…

你应该用USB还是或耳机插孔连接你的电脑耳机?这里有详细解释

​如果你有一套有线耳机&#xff0c;可以通过USB连接或传统耳机插孔连接到电脑&#xff0c;你可能想知道使用这两个端口选项的实际区别。 使用耳机插孔 如果你使用传统的模拟电缆将耳机连接到计算机&#xff08;或任何带耳机插孔的设备&#xff09;&#xff0c;则耳机的作用与…

英码科技算能系列边缘计算盒子再添新成员!搭载TPU处理器BM1688CV186AH,功耗更低、接口更丰富

在数据呈现指数级增长的今天&#xff0c;越来越多的领域和细分场景对实时、高效的数据处理和分析的需求日益增长&#xff0c;对智能算力的需求也不断增强。为应对新的市场趋势&#xff0c;英码科技凭借自身的硬件研发优势&#xff0c;携手算能相继推出了基于BM1684的边缘计算盒…