算法之查找
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、顺序查找: package com.arithmetic.search; //顺序查找 //sequentialSearch 方法接收一个整数数组和一个目标元素作为参数,并使用顺序查找的方式在数组中查找目标元素。 //它通过循环遍历数组元素,逐个与目标元素比较,如果找到…...
LInux脚本学习
1.注释 #单行注释 以 # 字符开头就是单行注释 当然第一行除外,比较特殊 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)
本文用于检验学习效果,忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备:IP地址 区分网络:网络地址 网络互联:路由器 主机上进程间通信:端口 http是常用的协议,基于TCP协议 TCP VS U…...
【HBase】
什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次(数据…...
Vue3:使用Pinia存储、读取、修改数据
一、存储数据 Pinia插件中,存储数据的配置项是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 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录…...
前端三剑客 —— CSS (第三节)
目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…...
C# 系统学习(异步编程)
在C#中,异步编程是一种优化程序性能的关键技术,特别是在处理I/O密集型操作(如网络请求、数据库查询、文件读写等)时,能够有效避免由于长时间等待而导致的线程阻塞,从而提高应用的响应速度和资源利用率。asy…...
前端工程师————CSS学习
选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括:标签选择器,类选择器,id选择器,通配符选择器标签选择器 类选择器 语法:.类名{属性1: 属性值;} 类名可以随便起 多类名使用方式&am…...
C# 登录界面代码
背景 MVVM 是一种软件架构模式,用于创建用户界面。它将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离开来,以提高代码的可维护性和可测试性。 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知识,整理一下xss的绕过思路。 level11 观察测试: 1.四个隐藏参数标签 2.全部get传参一遍发现t_sort可赋值,使用的是get传参 3.针对t_sort测试过滤的字符 t_sort< > & ; " 检测到他除了<>,别的全部过滤。 因为…...
Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…...
技术揭秘:如何打造完美互动的充电桩硬件与服务平台?
充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述: 前端: 位于图像的顶部,颜色为浅绿色。用户服务端: 紧邻前端,颜色为淡黄色。设备服…...
【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(输入/输出)和 NIO(新输入/输出)都是处理输入和输出操作的方式,它们的主要区别在于如何处理数据的读写。 阻塞与非阻塞: IO是阻塞的,这意味着当一个线程调用read()或write()时,该线…...
爬虫部署平台crawlab使用说明
Crawlab 是一个基于 Go 语言的分布式网络爬虫管理平台,它支持 Python、Node.js、Jar、EXE 等多种类型的爬虫。 Crawlab 提供了一个可视化的界面,并且可以通过简单的配置来管理和监控爬虫程序。 以下是 Crawlab 的一些主要优点: 集中管理&am…...
uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)
问题: 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考: 是不是需要引入uni.scss ? 答案不需要 uni.scss是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…...
Redis的5大常见数据类型的用法
上一篇文章我们讲了Redis的10大应用场景,这一篇文章就针对Redis的常用数据结构进行一个说明,通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时,不同数据类型对应的不同数据结构,如下就对5大常用的数据类型进行…...
刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢?
刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢? ——小品《生日快乐》(中5)的台词 (接上) 赵本山:噢!对对!那谁,老四,是…...
Unity之PUN实现多人联机射击游戏的优化(Section 2)
目录 🎮一、准备工作 🎮二、实现手雷投掷动作 🎮三、手雷投掷同步 💤3.1 photonView.RPC 🎮四、同步手雷伤害 这几周都给我布置任务了,最近可忙。现在终于有机会更新了,也谢谢大家的阅读&a…...
多叉树题目:N 叉树的层序遍历
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:N 叉树的层序遍历 出处:429. N 叉树的层序遍历 难度 4 级 题目描述 要求 给定一个 N 叉树的根结点 root \texttt{root} root…...
时序数据库IoTDB:功能详解与行业应用
一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前,先了解一下何谓时序数据。 时序数据,也称为时间序列数据,是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…...
信息系统项目管理师——第18章项目绩效域管理(一)
本章节内容属于第四版新增知识,为PMBOK第七版专有,选择、案例、论文都会考,属于比较重要的章节。 选择题,稳定考3分左右,新教材基本考课本原话,需要多读课本,多刷题。 案例题,考的概…...
WebSocket用户验证
在WebSocket中,如何携带用户的验证信息 一、在OnMessage中进行验证 客户端在连接到服务器后,客户端通过发送消息,服务器端在OnMessage方法中,进行信息验证,这种方式需要将用户身份验证及接收用户消息进行混合处理&am…...
NOSQL(非关系型数据库)的优缺点有哪些?
优点: 高度灵活且可扩展:NoSQL数据库不受固定数据模型的限制,可以根据应用需求灵活设计数据结构,轻松应对大规模数据集。此外,它支持分布式架构,具有出色的水平扩展能力,能够高效地处理大量数据…...
个人推荐Redis比较好的一种使用规范
随着对个人项目的不断开发、迭代和重构,博主在这个过程中总结出了一套使用redis的较好的规范。主要包含Redis的key命名规范和Redis代码规范。 主要内容 主要包含以下几个内容: 同一应用的key在最前面添加统一的前缀,如应用名; 案…...
【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理
目录 一、前言二、排查问题三、解决方法 一、前言 用过宝塔创建网站,大家应该都非常熟悉,但是用随着用的时间越来越多,宝塔所占用的空间也越来越多,不停的加大数据盘都没有用,我原先买了30G够用了,随着时间…...
Unity类银河恶魔城学习记录11-15 p117 Ice and Fire item Effect源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili IceAndFire_Controller.cs using System.Collections; using System.Coll…...
Qt QML的枚举浅用
QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的,C的枚举定义方法 序言 概念 QML的枚举和C的其实差不多,但是呢,局限比较多,首先不能在main.qml里定义,也不能在子项中定义。 …...
大理石在哪些网站做宣传/百度咨询电话 人工
参考博客:uni-app 中保持用户登录状态...
地勘网站建设方案/app推广方案模板
我整理了一下,大概有四种,亲测成功三种。 第一种是最愚蠢的,不过看许多博客都使用这种方法,即旋转bitmap: Bitmap bitmap ((BitmapDrawable)getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(); Matri…...
洛阳专业网站设计开发制作建站公司/推广普通话手抄报简单漂亮
题图:https://unsplash.com/nielsenramon在OO(面向对象)编程中,类中的方法有多种形式:实例方法、静态方法、类方法、甚至还可以有抽象方法,本文来说说实例方法在Python中是如何工作的,后面再来谈其他方法。先来定义一个…...
wordpress 自己的html/网站设计与网页制作
1.安装的时候选择的是简单配置,其中不包括字符集,所以安装完成以后修改my.ini配置文件,将client和server端字符集修改为utf8。 注意:修改完成后需要重新启动window服务,此操作可以通过两种方式实现。一是手动ÿ…...
网站建设在哪里进行/营销 推广
2018-09-05EPSON 1600K4打印机如何打印明信片EPSON 1600K4打印机对纸张的厚度是有范围要求的,太厚的纸张容易对设备造成伤害,请见下参数表是否越过范围(纸张厚度 0。065-0。52mm ) 打印针数(针) 24 最高分辨率 360dpi 打印速度 149字/秒 打印宽度 单页纸…...
怎么做各类网站/抖音seo优化软件
自動目錄Base64 應用在非常多的地方,能夠處理許多難搞的字元,讓他們不會被系統或是協定當成令令來執行,例如中文字或二進位的字串。因此,常常會用 base64 encode 及 base64 decode在Linux上有一個指令 base64 可以幫我們完成這個任…...