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

数据结构篇

链表

用数组模拟链表,看该链表结构,有几个域则用几个数组分别存储
单链表是只知道下一个元素位置,双链表还知道上一个链表位置

单链表

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

双向链表

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

左移右移

请添加图片描述
请添加图片描述
请添加图片描述

模拟栈

请添加图片描述
请添加图片描述

判断括号序列

请添加图片描述
请添加图片描述

队列

请添加图片描述

模拟队列

请添加图片描述
请添加图片描述
请添加图片描述

递归

请添加图片描述

请添加图片描述

集合和哈希

请添加图片描述
请添加图片描述

集合就是哈希表

哈希表的实现

请添加图片描述

N要设置为其数据的2倍多一些, 取模大于那个数就可以了。
q<=10的五次方,所以取模mod大于这个数就可以了,N数组设为其2倍多10.
记住
哈希表解决查询x是否在集合中出现过以及插入。选择合适的方法插入。

Java提供的Set集合

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Map哈希表(键值对,按键查找)

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

离散化

请添加图片描述
请添加图片描述

  • 首先是有序,且不重复,所以使用TreeMap
  • 它存入后就是自动排序
  • 先把所有数读入放在a数组,再把a数组存入mp中,mp中的就是排好序的,而a是原数组。
  • 因为mp中的是按自然顺序排好的,那么从头到尾遍历就是从小到大,此时让其数值和排名构成键值对
  • 数值为键,最后将原数组顺序a的数值去mp中通过get方法获取对应值也就是排名替代原数组。
  • 最后就是最终答案

优先队列

优先队列的使用

请添加图片描述
请添加图片描述
请添加图片描述

堆排序(很重要,一年一次)

请添加图片描述
最后要输出一个换行符

multiset实现优先队列

可排序有删除操作,那应该用这个,因为map中删除的复杂度为0(n)请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
这段代码定义了一个名为 Multiset 的类,该类使用 TreeMap 来实现一个多集合(multiset),其中元素可以重复。以下是代码的详细解释:

代码解释
声明变量:

TreeMap<T, Integer> multiset;
int len = 0;

TreeMap<T, Integer> multiset;: 声明一个 TreeMap 对象 multiset,键类型为 T(泛型类型),值类型为 Integer。这个 TreeMap 用于存储多集合中的元素及其出现次数。泛型类型根据传入的数据的类型来确定,没有严格的要求。
int len = 0;: 声明一个整型变量 len,初始化为 0,用于记录多集合中元素的总数。
无参构造函数:

Multiset() {multiset = new TreeMap<>();
}

这个构造函数创建一个新的 TreeMap 实例,并将其赋值给 multiset 变量。默认情况下,TreeMap 使用自然顺序对键进行排序。(默认是升序)
带比较器的构造函数:

Multiset(Comparator cmp) {multiset = new TreeMap<>(cmp);
}

这个构造函数接受一个 Comparator 对象 cmp 作为参数,并创建一个新的 TreeMap 实例,使用指定的比较器对键进行排序。
代码功能总结
多集合(Multiset): 多集合是一种数据结构,允许元素重复出现,并且每个元素都有一个计数表示其出现次数。
使用 TreeMap: TreeMap 是一种有序映射,它保证了键的有序性,并且提供了高效的插入、删除和查找操作。
构造函数: 提供了两种构造函数,一种是默认构造函数,使用自然顺序对键进行排序;另一种是带比较器的构造函数,允许用户自定义键的排序方式。
示例用法
假设你有一个 Multiset 类,你可以这样使用它:

public class Main {public static void main(String[] args) {// 创建一个默认的 MultisetMultiset<String> ms1 = new Multiset<>();ms1.add("apple");ms1.add("banana");ms1.add("apple");// 创建一个带有自定义比较器的 MultisetComparator<String> cmp = (s1, s2) -> s2.compareTo(s1); // 逆序比较Multiset<String> ms2 = new Multiset<>(cmp);ms2.add("apple");ms2.add("banana");ms2.add("apple");System.out.println(ms1); // 输出:{apple=2, banana=1}System.out.println(ms2); // 输出:{banana=1, apple=2} (因为比较器是逆序的)}
}

通过这种方式,你可以根据需要创建不同类型的多集合,并控制元素的排序方式。

这段代码定义了一个Comparator类型的比较器,用于对字符串进行逆序排序(从Z到A)。让我们拆解一下这个表达式来理解它的含义:

Comparator<String> cmp = (s1, s2) -> s2.compareTo(s1);

语法解释
Comparator: 这是Java中的一个泛型接口,用于定义如何比较两个对象以便进行排序。在这里,它专门用于比较String类型的对象。
cmp: 这是你给这个特定的Comparator实例起的名字。
(s1, s2): 这部分定义了lambda表达式的参数列表。在本例中,有两个参数s1和s2,它们都是String类型的对象。Lambda表达式提供了一种简洁的方式来实现只有一个抽象方法的接口(在这种情况下,是Comparator接口的compare方法)。
->: Lambda表达式中的箭头符号,用来分隔参数列表和表达式体。
s2.compareTo(s1): 这是lambda表达式的主体部分,它定义了比较逻辑。这里使用了String类自带的compareTo方法来进行比较,但与常规的升序排列不同的是,这里是s2.compareTo(s1)而不是s1.compareTo(s2),这就导致了降序排列的结果。
工作原理
通常情况下,String的compareTo方法按照字典顺序比较两个字符串,返回:

小于0的数:如果调用该方法的字符串小于参数字符串(按字典顺序);
等于0的数:如果两个字符串相等;
大于0的数:如果调用该方法的字符串大于参数字符串。
在标准的升序排序中,你会直接使用s1.compareTo(s2)。然而,在这里,通过交换参数位置为s2.compareTo(s1),比较逻辑被反转了,从而实现了降序排序。

Multiset的代码实现

请添加图片描述
getOrDefault表示若是有的话那么就返回该键对应的值,若是没有那么就返回0
在这里实现重复存储其实就是改变键值对里面值的数量,重复多少那么数量改为多少请添加图片描述
请添加图片描述
请添加图片描述

单调栈

除了维护栈的后进先出,还要维护从栈顶到栈底的单调性
请添加图片描述

数的左右最值问题

请添加图片描述
维护的是下标序列,不是其数组中确切的值

  • 因为维护的是下标序列,所以天然单调栈就满足是最左边
  • 因为是单调栈,在后续判断中,当前元素称为新的栈顶,下面的数都比当前元素大,若当前元素比现在栈顶元素大,那么之前弹出的元素都要小于当前元素,所以弹出没有影响。
    请添加图片描述
    请添加图片描述

左右最值分为四种情况:左右只需要改变遍历顺序就可以,比其大或小则改变单调性即可

请添加图片描述

请添加图片描述
请添加图片描述

单调队列

滑动窗口最值问题

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

并查集

不相交集合的并问题

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

例题:连通块中点的数量

请添加图片描述
请添加图片描述

树状数组

单点修改,区间求和问题

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

相关文章:

数据结构篇

链表 用数组模拟链表&#xff0c;看该链表结构&#xff0c;有几个域则用几个数组分别存储 单链表是只知道下一个元素位置&#xff0c;双链表还知道上一个链表位置 单链表 双向链表 左移右移 栈 模拟栈 判断括号序列 队列 模拟队列 递归 集合和哈希 集合就是哈希表 哈希表的实现…...

「软件设计模式」建造者模式(Builder)

深入解析建造者模式&#xff1a;用C打造灵活对象构建流水线 引言&#xff1a;当对象构建遇上排列组合 在开发复杂业务系统时&#xff0c;你是否经常面对这样的类&#xff1a;它有20个成员变量&#xff0c;其中5个是必填项&#xff0c;15个是可选项。当用户需要创建豪华套餐A&…...

Matlab 机器人 雅可比矩阵

工业机器人运动学与Matlab正逆解算法学习笔记&#xff08;用心总结一文全会&#xff09;&#xff08;四&#xff09;——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客 matlab求雅可比矩阵_六轴机械臂 矢量积法求解雅可比矩阵-CSDN博客 (63 封私信 / 80 条消息…...

DeepSeek 助力 Vue 开发:打造丝滑的面包屑导航(Breadcrumbs)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

IntelliJ IDEA 2024.1.4版无Tomcat配置

IntelliJ IDEA 2024.1.4 (Ultimate Edition) 安装完成后&#xff0c;调试项目发现找不到Tomcat服务&#xff1a; 按照常规操作添加&#xff0c;发现服务插件中没有Tomcat。。。 解决方法 1、找到IDE设置窗口 2、点击Plugins按钮&#xff0c;进入插件窗口&#xff0c;搜索T…...

chrome://version/

浏览器输入&#xff1a; chrome://version/ Google浏览器版本号以及安装路径 Google Chrome131.0.6778.205 (正式版本) &#xff08;64 位&#xff09; (cohort: Stable) 修订版本81b36b9535e3e3b610a52df3da48cd81362ec860-refs/branch-heads/6778_155{#8}操作系统Windows…...

知识图谱数据库 Neo4j in Docker笔记

下载 docker pull neo4j:community官方说明 https://neo4j.com/docs/operations-manual/2025.01/docker/introduction/ 启动 docker run \--restart always \--publish7474:7474 --publish7687:7687 \--env NEO4J_AUTHneo4j/your_password \--volumeD:\files\knowledgegrap…...

【动手学强化学习】02多臂老虎机

问题定义 强化学习关注的是在于环境交互中学习&#xff0c;是一种试错学习的范式。在正式进入强化学习之前&#xff0c;我们先来了解多臂老虎机问题。该问题也被看作简化版的强化学习&#xff0c;帮助我们更快地过度到强化学习阶段。 有一个拥有 K K K 根拉杆的老虎机&#…...

【网络编程】之Udp网络通信步骤

【网络编程】之Udp网络通信步骤 TCP网络通信TCP网络通信的步骤对于服务器端对于客户端 TCP实现echo功能代码实现服务器端getsockname函数介绍 客户端效果展示 对比两组函数 TCP网络通信 TCP网络通信的步骤 对于服务器端 创建监听套接字。&#xff08;调用socket函数&#xff…...

Java 基于 SpringBoot+Vue 的家政服务管理平台设计与实现

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…...

架构——Nginx功能、职责、原理、配置示例、应用场景

以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明&#xff1a; 一、Nginx 的核心功能 1. 静态资源服务 功能&#xff1a;直接返回静态文件&#xff08;如 HTML、CSS、JS、图片、视频等&#xff09;。配置示例&#xff1a;server {listen 80…...

Spring Boot中使用Flyway进行数据库迁移

文章目录 概要Spring Boot 集成 FlywayFlyway 其他用法bug错误Flyway版本不兼容数据库存在表了Flyway 的校验和&#xff08;Checksum&#xff09;不匹配 概要 在 Spring Boot 项目开发中&#xff0c;数据库的变更不可避免。手动执行 SQL 脚本不仅容易出错&#xff0c;也难以维…...

CAS单点登录(第7版)9.属性

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时&#xff0c;往往使用其名称进行定义和引用&#xff0c;而无需任何其他元数据或修饰。例如&#…...

137,【4】 buuctf web [SCTF2019]Flag Shop

进入靶场 都点击看看 发现点击work会增加&#xffe5; 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT&#xff08;JSON Web Token&#xff09;字符串。JWT 通常由三部分组成&#xff0c;通过点&#xff08;.&#xff09;分隔&#xff0c;分别是头部&#xff08;Header&…...

P9853 [入门赛 #17] 方程求解

P9853 [入门赛 #17] 方程求解 - 洛谷 题目描述 小A有n个关于x的方程&#xff0c;第i个方程形如ai​xi​bi​ci​。方程的解x均为正整数&#xff0c;例如下面几个方程都是符合要求的方程&#xff1a; 2x 4 10 -3x 13 10 4x - 8 16 其中&#xff0c;第一组方程的解为x1​…...

【网络安全 | 漏洞挖掘】跨子域账户合并导致的账户劫持与删除

未经许可,不得转载。 文章目录 概述正文漏洞成因概述 在对目标系统进行安全测试时,发现其运行着两个独立的域名——一个用于司机用户,一个用于开发者/企业用户。表面上看,这两个域名各自独立管理账户,但测试表明它们在处理电子邮件变更时存在严重的逻辑漏洞。该漏洞允许攻…...

spring集成activiti流程引擎(源码)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;请假审批demo从流程绘制到审批结束实例。 源码获取&#xff1a;本文末个人名片直接获取。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行…...

ROS基本功能

1.Topic话题与Message消息&#xff08;主要通讯方式&#xff09; 基本规则 发布消息的步骤 常用工具 话题的订阅 使用launch启动多个节点...

C++基础系列【13】类的成员初始化

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

Redis 03章——10大数据类型概述

一、which10 &#xff08;1&#xff09;一图 &#xff08;2&#xff09;提前声明 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串 官网&#xff1a;Understand Redis data types | Docs &#xff08;3&#xff09;分别是 1.3.1redis字符串&#xff0…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...