当前位置: 首页 > 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;是…...

在QT中将多个项目(同代码不同ui和资源文件)合并

Linux下的qt环境 我现在有三个项目&#xff0c;代码一模一样&#xff0c;只有UI文件和资源文件不同现在想要合并代码 后期好上传在git 仅需要一个分支 更好管理将随行 康养 采图三个项目代码合并 思路是这样的 将每个项目都分类打包区分开我是在康养这个项目的基础上合…...

Kodi中文插件库终极指南:3分钟打造你的智能家庭影院

Kodi中文插件库终极指南&#xff1a;3分钟打造你的智能家庭影院 【免费下载链接】xbmc-addons-chinese Addon scripts, plugins, and skins for XBMC Media Center. Special for chinese laguage. 项目地址: https://gitcode.com/gh_mirrors/xb/xbmc-addons-chinese 还在…...

全能解析工具UniExtract2:多格式提取的效率革命

全能解析工具UniExtract2&#xff1a;多格式提取的效率革命 【免费下载链接】UniExtract2 Universal Extractor 2 is a tool to extract files from any type of archive or installer. 项目地址: https://gitcode.com/gh_mirrors/un/UniExtract2 在数字化信息处理领域&…...

终极指南:如何使用IEA-15-240-RWT 15兆瓦海上风力涡轮机参考模型开启风能研究

终极指南&#xff1a;如何使用IEA-15-240-RWT 15兆瓦海上风力涡轮机参考模型开启风能研究 【免费下载链接】IEA-15-240-RWT 15MW reference wind turbine repository developed in conjunction with IEA Wind 项目地址: https://gitcode.com/gh_mirrors/ie/IEA-15-240-RWT …...

WeChatExporter:微信聊天记录安全备份与高效导出全指南

WeChatExporter&#xff1a;微信聊天记录安全备份与高效导出全指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 一、问题诊断&#xff1a;微信数据安全的核心挑战 1.…...

视觉隐形:在亚马逊,为何模仿“IBM式缩写”是新品牌的认知坟墓

在亚马逊这个由清晰搜索和快速决策驱动的商业世界&#xff0c;无数新卖家犯下一个致命的战略性错误&#xff1a;他们看到“IBM”、“GE”等巨无霸公司使用缩写名&#xff0c;便误以为这是一种高级、专业的品牌姿态&#xff0c;于是为自己的新品牌也注册了诸如“KMZ Tech”、“V…...

vscode如何添加ollama本地模型-实现token自由

vscode一直支持的都是云端闭源的模型&#xff0c;例如 GPT Claude等等&#xff0c;当这些闭源模型的免费额度用完之后&#xff0c;则需要付费继续使用。本文介绍的是vscode接入ollama的本地模型&#xff0c;从而实现token自由。 ollama 首先需要到ollama的官网下载ollama应用…...

StructBERT中文语义匹配实战:一键部署+可视化进度条,小白也能用

StructBERT中文语义匹配实战&#xff1a;一键部署可视化进度条&#xff0c;小白也能用 1. 工具概览&#xff1a;你的中文句子"CT扫描仪" 想象一下&#xff0c;你手上有两份用户反馈&#xff1a;"这个手机电池很耐用"和"这款设备续航能力超强"。…...

基于Python的校园便利平台毕设源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于Python的校园便利平台&#xff0c;以提升校园生活品质&#xff0c;优化资源配置&#xff0c;增强学生与教职工的互动体验。具体研究目的如…...

Claude Code 愚人节彩蛋:终端里的虚拟宠物伴侣

Claude Code 愚人节彩蛋&#xff1a;终端里的虚拟宠物伴侣 在 AI 编程助手的深处&#xff0c;藏着一个等待孵化的秘密——18 种 ASCII 精灵、5 级稀有度、完整的 RPG 属性系统。这可能是你见过的最可爱的命令行宠物。 意外的发现 在逆向分析 Claude Code 源码的过程中&#xf…...