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

Cursor AI 编辑器一键配置指南:从零搭建高效编程工作站

1. 项目概述&#xff1a;一个为 Cursor 编辑器量身定制的“开箱即用”向导如果你是一名开发者&#xff0c;最近肯定没少听人提起 Cursor 这款编辑器。它基于 VS Code&#xff0c;但深度集成了 AI 能力&#xff0c;号称能理解你的代码上下文&#xff0c;帮你写代码、改 Bug、甚至…...

Navicat重置终极指南:macOS数据库管理工具无限试用方案

Navicat重置终极指南&#xff1a;macOS数据库管理工具无限试用方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否在为…...

Kubernetes Service Mesh进阶:Linkerd实践与对比

Kubernetes Service Mesh进阶&#xff1a;Linkerd实践与对比 一、引言 服务网格(Service Mesh)是云原生架构中用于管理服务间通信的基础设施层。Linkerd作为第二代服务网格&#xff0c;以其轻量、高性能的特点备受关注。本文将深入探讨Linkerd的核心概念、实践部署以及与Istio的…...

SMU5.4-5.10补题

牛客Round142 A-E题vj A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;F...

SpringBoot项目里用Sharding-JDBC做分库分表,这5个配置项最容易踩坑

SpringBoot整合Sharding-JDBC分库分表&#xff1a;五大高频配置陷阱与实战解决方案 当数据库单表数据量突破千万级大关时&#xff0c;分库分表几乎是每个Java开发者必须面对的课题。作为Apache ShardingSphere的核心模块&#xff0c;Sharding-JDBC以其轻量级、低侵入的特性成为…...

rCore-Tutorial-v3:从零开始用Rust编写RISC-V操作系统的终极指南

rCore-Tutorial-v3&#xff1a;从零开始用Rust编写RISC-V操作系统的终极指南 【免费下载链接】rCore-Tutorial-v3 Lets write an OS which can run on RISC-V in Rust from scratch! 项目地址: https://gitcode.com/gh_mirrors/rc/rCore-Tutorial-v3 你是否曾梦想过亲手…...

IPBan快速入门:一键安装配置,立即阻止僵尸网络入侵

IPBan快速入门&#xff1a;一键安装配置&#xff0c;立即阻止僵尸网络入侵 【免费下载链接】IPBan Since 2011, IPBan is the worlds most trusted, free security software to block hackers and botnets. With both Windows and Linux support, IPBan has your dedicated or …...

隐藏在闲鱼暗网的暴利生意

今天想跟大家说个颠覆认知的事儿——你平时用来卖旧衣服、砍价包邮的闲鱼&#xff0c;其实还有一张脸&#xff0c;那张脸长什么样呢&#xff1f;我管它叫“成年人最隐秘的交易所”。 你敢信吗&#xff1f;有人在那儿卖了10万单&#xff0c;一单实物都不发&#xff0c;纯利润&am…...

不企不跨的 HANA 之道,老子这句话给 SAP HANA 开发留下的六层工程提醒

老子说「企者不立,跨者不行;自见者不明;自是者不彰;自伐者无功;自矜者不长。」这句话放在 SAP HANA 开发里,读起来并不玄。它讲的不是退缩,而是反对用一种过度用力、过度表现、过度自信的姿态去处理复杂系统。SAP HANA 是内存数据库,是列式存储、并行执行、SQL 优化器、…...

CANN/GE获取模型输出名称

aclmdlGetOutputNameByIndex 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch…...