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

算法之查找

1、顺序查找:

package com.arithmetic.search;
//顺序查找
//sequentialSearch 方法接收一个整数数组和一个目标元素作为参数,并使用顺序查找的方式在数组中查找目标元素。
//它通过循环遍历数组元素,逐个与目标元素比较,如果找到了目标元素,则返回其索引位置。
//如果遍历完整个数组仍然没有找到目标元素,则返回 -1。
//在 main 方法中,创建一个测试数组并定义一个目标元素,然后调用 sequentialSearch 方法进行查找。
//根据返回的结果判断是否找到了目标元素,并输出相应的提示信息。
//顺序查找的时间复杂度是 O(n),其中 n 是数组的长度。
//它是一种简单直接的查找算法,适用于小规模的数组或不需要频繁查找的情况。但对于大规模的数组,效率较低。
//如果需要在大规模数组中进行频繁查找,可以考虑其他更高效的查找算法,如二分查找或哈希查找。
public class SequentialSearchDemo {public static void main(String[] args) {int[] arr = {5, 2, 9, 1, 3, 6, 4, 8, 7};int target = 3;int index = sequentialSearch(arr, target);if (index != -1) {System.out.println("目标元素 " + target + " 在数组中的索引位置为 " + index);} else {System.out.println("目标元素 " + target + " 不在数组中");}}public static int sequentialSearch(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {return i; // 找到了目标元素,返回索引位置}}return -1; // 没有找到目标元素,返回 -1}
}

2、二分查找:

package com.arithmetic.search;
//二分查找
//binarySearch 方法接收一个有序整数数组和一个目标元素作为参数,并使用二分查找的方式在数组中查找目标元素。
//它维护两个变量 left 和 right,分别指向查找范围的左边界和右边界。
//通过循环不断缩小查找范围,每次将查找范围的中间元素与目标元素进行比较。
//如果中间元素等于目标元素,则返回它的索引位置。
//如果中间元素小于目标元素,则目标元素在右半部分,缩小范围到右半部分;如果中间元素大于目标元素,则目标元素在左半部分,缩小范围到左半部分。
//循环直到找到目标元素或查找范围缩小为 0。
//在 main 方法中,创建一个有序数组并定义一个目标元素,然后调用 binarySearch 方法进行查找。
//根据返回的结果判断是否找到了目标元素,并输出相应的提示信息。
//二分查找的时间复杂度是 O(log n),其中 n 是数组的长度。
//相比于顺序查找,二分查找的效率更高,但要求数组必须是有序的。
//如果数组无序,需要先进行排序操作,再进行二分查找。
public class BinarySearchDemo {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};int target = 6;int index = binarySearch(arr, target);if (index != -1) {System.out.println("目标元素 " + target + " 在数组中的索引位置为 " + index);} else {System.out.println("目标元素 " + target + " 不在数组中");}}public static int binarySearch(int[] arr, int target) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return mid; // 找到了目标元素,返回索引位置} else if (arr[mid] < target) {left = mid + 1; // 目标元素在右半部分,缩小范围到右半部分} else {right = mid - 1; // 目标元素在左半部分,缩小范围到左半部分}}return -1; // 没有找到目标元素,返回 -1}
}

3、散列查找:

package com.arithmetic.search;
//散列查找
//一个简单的哈希表,使用了开放地址法的线性探测解决冲突。
//通过insert方法插入数据,并通过search方法查找数据。
//可以根据自己的需求修改散列函数和解决冲突的方法。
public class HashTableDemo {private static final int TABLE_SIZE = 10; // 哈希表的大小private Entry[] table; // 哈希表的数组public HashTableDemo() {table = new Entry[TABLE_SIZE]; // 初始化哈希表}// 插入数据public void insert(String key, int value) {int hash = getHash(key); // 计算散列值int index = hash % TABLE_SIZE; // 计算索引位置// 如果索引位置已经被占用,则处理冲突if (table[index] != null) {// 处理冲突的方法可以有很多种,这里使用开放地址法的线性探测while (table[index] != null) {index = (index + 1) % TABLE_SIZE; // 线性探测}}table[index] = new Entry(key, value); // 插入数据}// 查找数据public int search(String key) {int hash = getHash(key); // 计算散列值int index = hash % TABLE_SIZE; // 计算索引位置// 如果索引位置不是目标数据,则继续线性探测while (table[index] != null && !table[index].getKey().equals(key)) {index = (index + 1) % TABLE_SIZE; // 线性探测}// 返回目标数据的值,如果不存在则返回-1if (table[index] != null) {return table[index].getValue();} else {return -1;}}// 计算散列值的方法,这里简单地将每个字符的ASCII码相加private int getHash(String key) {int hash = 0;for (int i = 0; i < key.length(); i++) {hash += key.charAt(i);}return hash;}// 定义存储数据的Entry类private static class Entry {private String key;private int value;public Entry(String key, int value) {this.key = key;this.value = value;}public String getKey() {return key;}public int getValue() {return value;}}public static void main(String[] args) {HashTableDemo hashTable = new HashTableDemo();// 插入数据hashTable.insert("abc", 10);hashTable.insert("def", 20);hashTable.insert("ghi", 30);// 查找数据System.out.println(hashTable.search("abc")); // 输出:10System.out.println(hashTable.search("xyz")); // 输出:-1}
}

相关文章:

算法之查找

1、顺序查找&#xff1a; package com.arithmetic.search; //顺序查找 //sequentialSearch 方法接收一个整数数组和一个目标元素作为参数&#xff0c;并使用顺序查找的方式在数组中查找目标元素。 //它通过循环遍历数组元素&#xff0c;逐个与目标元素比较&#xff0c;如果找到…...

LInux脚本学习

1.注释 #单行注释 以 # 字符开头就是单行注释 当然第一行除外&#xff0c;比较特殊 2.多行注释 3.Shell文件的作用 Shell文件就是linux命令集 4.sh脚本的执行方式 bash xxx.sh 5.新建的文件会没有执行权限 #为文件赋予执行权限 chmod ux xxx.sh 6.编写规范 #!/bin/bash #…...

JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备&#xff1a;IP地址 区分网络&#xff1a;网络地址 网络互联&#xff1a;路由器 主机上进程间通信&#xff1a;端口 http是常用的协议&#xff0c;基于TCP协议 TCP VS U…...

【HBase】

什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次&#xff08;数据…...

Vue3:使用Pinia存储、读取、修改数据

一、存储数据 Pinia插件中&#xff0c;存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…...

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理&#xff0c;Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…...

前端三剑客 —— CSS (第三节)

目录 上节回顾&#xff1a; 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 &#xff1a; 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…...

C# 系统学习(异步编程)

在C#中&#xff0c;异步编程是一种优化程序性能的关键技术&#xff0c;特别是在处理I/O密集型操作&#xff08;如网络请求、数据库查询、文件读写等&#xff09;时&#xff0c;能够有效避免由于长时间等待而导致的线程阻塞&#xff0c;从而提高应用的响应速度和资源利用率。asy…...

前端工程师————CSS学习

选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括&#xff1a;标签选择器&#xff0c;类选择器&#xff0c;id选择器&#xff0c;通配符选择器标签选择器 类选择器 语法&#xff1a;.类名{属性1&#xff1a; 属性值&#xff1b;} 类名可以随便起 多类名使用方式&am…...

C# 登录界面代码

背景 MVVM 是一种软件架构模式&#xff0c;用于创建用户界面。它将用户界面&#xff08;View&#xff09;、业务逻辑&#xff08;ViewModel&#xff09;和数据模型&#xff08;Model&#xff09;分离开来&#xff0c;以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…...

点云的Python均值采样

一、代码 Python import numpy as np import open3d as o3ddef mean_sampling(point_cloud, num_samples=None, depth=None, method=knn, k=10):"""对点云进行均值下采样。:param point_cloud: Open3D PointCloud对象:param num_samples: (仅当method=knn时使…...

xss-labs 11-13通关记录

前言 最近复习xss知识&#xff0c;整理一下xss的绕过思路。 level11 观察测试: 1.四个隐藏参数标签 2.全部get传参一遍发现t_sort可赋值&#xff0c;使用的是get传参 3.针对t_sort测试过滤的字符 t_sort< > & ; " 检测到他除了<>,别的全部过滤。 因为…...

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…...

技术揭秘:如何打造完美互动的充电桩硬件与服务平台?

充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述&#xff1a; 前端&#xff1a; 位于图像的顶部&#xff0c;颜色为浅绿色。用户服务端&#xff1a; 紧邻前端&#xff0c;颜色为淡黄色。设备服…...

【Django学习笔记(四)】JavaScript 语言介绍

JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…...

IO和NIO的主要区别在哪里?

Java 中的 IO&#xff08;输入/输出&#xff09;和 NIO&#xff08;新输入/输出&#xff09;都是处理输入和输出操作的方式&#xff0c;它们的主要区别在于如何处理数据的读写。 阻塞与非阻塞: IO是阻塞的&#xff0c;这意味着当一个线程调用read()或write()时&#xff0c;该线…...

爬虫部署平台crawlab使用说明

Crawlab 是一个基于 Go 语言的分布式网络爬虫管理平台&#xff0c;它支持 Python、Node.js、Jar、EXE 等多种类型的爬虫。 Crawlab 提供了一个可视化的界面&#xff0c;并且可以通过简单的配置来管理和监控爬虫程序。 以下是 Crawlab 的一些主要优点&#xff1a; 集中管理&am…...

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)

问题&#xff1a; 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考&#xff1a; 是不是需要引入uni.scss &#xff1f; 答案不需要 uni.scss是一个特殊文件&#xff0c;在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…...

Redis的5大常见数据类型的用法

上一篇文章我们讲了Redis的10大应用场景&#xff0c;这一篇文章就针对Redis的常用数据结构进行一个说明&#xff0c;通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时&#xff0c;不同数据类型对应的不同数据结构&#xff0c;如下就对5大常用的数据类型进行…...

刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢?

刘小光本就疑心赵本山与他媳妇李琳有染&#xff0c;赵本山为证实清白便想起蛋糕上的字&#xff0c;结果呢&#xff1f; ——小品《生日快乐》&#xff08;中5&#xff09;的台词 &#xff08;接上&#xff09; 赵本山&#xff1a;噢!对对!那谁&#xff0c;老四&#xff0c;是…...

Unity之PUN实现多人联机射击游戏的优化(Section 2)

目录 &#x1f3ae;一、准备工作 &#x1f3ae;二、实现手雷投掷动作 &#x1f3ae;三、手雷投掷同步 &#x1f4a4;3.1 photonView.RPC &#x1f3ae;四、同步手雷伤害 这几周都给我布置任务了&#xff0c;最近可忙。现在终于有机会更新了&#xff0c;也谢谢大家的阅读&a…...

多叉树题目:N 叉树的层序遍历

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;N 叉树的层序遍历 出处&#xff1a;429. N 叉树的层序遍历 难度 4 级 题目描述 要求 给定一个 N 叉树的根结点 root \texttt{root} root&#xf…...

时序数据库IoTDB:功能详解与行业应用

一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前&#xff0c;先了解一下何谓时序数据。 时序数据&#xff0c;也称为时间序列数据&#xff0c;是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…...

信息系统项目管理师——第18章项目绩效域管理(一)

本章节内容属于第四版新增知识&#xff0c;为PMBOK第七版专有&#xff0c;选择、案例、论文都会考&#xff0c;属于比较重要的章节。 选择题&#xff0c;稳定考3分左右&#xff0c;新教材基本考课本原话&#xff0c;需要多读课本&#xff0c;多刷题。 案例题&#xff0c;考的概…...

WebSocket用户验证

在WebSocket中&#xff0c;如何携带用户的验证信息 一、在OnMessage中进行验证 客户端在连接到服务器后&#xff0c;客户端通过发送消息&#xff0c;服务器端在OnMessage方法中&#xff0c;进行信息验证&#xff0c;这种方式需要将用户身份验证及接收用户消息进行混合处理&am…...

NOSQL(非关系型数据库)的优缺点有哪些?

优点&#xff1a; 高度灵活且可扩展&#xff1a;NoSQL数据库不受固定数据模型的限制&#xff0c;可以根据应用需求灵活设计数据结构&#xff0c;轻松应对大规模数据集。此外&#xff0c;它支持分布式架构&#xff0c;具有出色的水平扩展能力&#xff0c;能够高效地处理大量数据…...

个人推荐Redis比较好的一种使用规范

随着对个人项目的不断开发、迭代和重构&#xff0c;博主在这个过程中总结出了一套使用redis的较好的规范。主要包含Redis的key命名规范和Redis代码规范。 主要内容 主要包含以下几个内容&#xff1a; 同一应用的key在最前面添加统一的前缀&#xff0c;如应用名&#xff1b; 案…...

【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理

目录 一、前言二、排查问题三、解决方法 一、前言 用过宝塔创建网站&#xff0c;大家应该都非常熟悉&#xff0c;但是用随着用的时间越来越多&#xff0c;宝塔所占用的空间也越来越多&#xff0c;不停的加大数据盘都没有用&#xff0c;我原先买了30G够用了&#xff0c;随着时间…...

Unity类银河恶魔城学习记录11-15 p117 Ice and Fire item Effect源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili IceAndFire_Controller.cs using System.Collections; using System.Coll…...

Qt QML的枚举浅用

QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的&#xff0c;C的枚举定义方法 序言 概念 QML的枚举和C的其实差不多&#xff0c;但是呢&#xff0c;局限比较多&#xff0c;首先不能在main.qml里定义&#xff0c;也不能在子项中定义。 …...

大理石在哪些网站做宣传/百度咨询电话 人工

参考博客&#xff1a;uni-app 中保持用户登录状态...

地勘网站建设方案/app推广方案模板

我整理了一下&#xff0c;大概有四种&#xff0c;亲测成功三种。 第一种是最愚蠢的&#xff0c;不过看许多博客都使用这种方法&#xff0c;即旋转bitmap&#xff1a; Bitmap bitmap ((BitmapDrawable)getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(); Matri…...

洛阳专业网站设计开发制作建站公司/推广普通话手抄报简单漂亮

题图&#xff1a;https://unsplash.com/nielsenramon在OO(面向对象)编程中&#xff0c;类中的方法有多种形式&#xff1a;实例方法、静态方法、类方法、甚至还可以有抽象方法&#xff0c;本文来说说实例方法在Python中是如何工作的&#xff0c;后面再来谈其他方法。先来定义一个…...

wordpress 自己的html/网站设计与网页制作

1.安装的时候选择的是简单配置&#xff0c;其中不包括字符集&#xff0c;所以安装完成以后修改my.ini配置文件&#xff0c;将client和server端字符集修改为utf8。 注意&#xff1a;修改完成后需要重新启动window服务&#xff0c;此操作可以通过两种方式实现。一是手动&#xff…...

网站建设在哪里进行/营销 推广

2018-09-05EPSON 1600K4打印机如何打印明信片EPSON 1600K4打印机对纸张的厚度是有范围要求的&#xff0c;太厚的纸张容易对设备造成伤害&#xff0c;请见下参数表是否越过范围(纸张厚度 0。065-0。52mm ) 打印针数(针) 24 最高分辨率 360dpi 打印速度 149字/秒 打印宽度 单页纸…...

怎么做各类网站/抖音seo优化软件

自動目錄Base64 應用在非常多的地方&#xff0c;能夠處理許多難搞的字元&#xff0c;讓他們不會被系統或是協定當成令令來執行&#xff0c;例如中文字或二進位的字串。因此&#xff0c;常常會用 base64 encode 及 base64 decode在Linux上有一個指令 base64 可以幫我們完成這個任…...