算法笔记(十一)—— 并查集、KMP

news/2024/4/26 0:19:32/文章来源:https://blog.csdn.net/rygy_/article/details/129143532

并查集

支持集合快速合并

所有数据生成各自的集合,需要提供查询两个两素是不是属于一个集合,和集合合并操作,并查集能够在常数时间级别上对两个操作进行实现

1. 构造结构(数据+指针),将自己的指针指向自己,在查询操作时,只需要沿着指针走到头,看是否是一个元素,在合并操作时,另一个元素的指针指向需要合并的另一个元素(尺寸少的顶部挂在尺寸多的顶部下即可)

2. 在某次查找顶部节点时,将沿途节点的指针都直接指向顶部节点

3. 指针指向可以使用一个哈希表进行实现 elementmap fathermap sizemap(仅有顶部元素有记录)

KMP(字符串匹配加速算法)

有两个字符串str1、str2,查看str2是不是str1的子串

最长前缀(前缀和后缀的最大匹配长度):假设某个字符的之前的字符为abbabb,那么其最长前缀为abb,长度为3

假设str2为aabaabsa,那么根据其最长前缀信息作为其对应的next数组=[-1 0 1 0 1 2 3 0]

KMP流程:

1. 如果字符出现了不匹配,使用str2当前不匹配字符对应的next信息,将next对应字符移到当前不匹配位置进行比较

2. 如果str2移到第一个字符还是不能与srr1目前比对位置匹配,及next=-1时,将str1比对位置右移一位

求解next数组:

1. 0位置规定为-1,1位置规定为0

2. i位置是,利用i-1位的信息,如果next[i-1]=7,如果i-1的字符与第八个字符相同,next[i] = 8。如果不一样,就继续往前跳(利用第八个字符的next信息)

例题:

13 · 字符串查找 - LintCodeicon-default.png?t=N176https://www.lintcode.com/problem/13/?showListFe=true&page=1&submissionStatus=ACCEPTED&pageSize=50

class Solution {
public:vector<int> nexts;void cal_next(string str){if(str.size()==1){nexts.push_back(-1);return;}nexts.push_back(-1);nexts.push_back(0);int i = 2;int cn = 0;while(i < str.size()){if(str[i-1]==str[cn]){nexts.push_back(cn+1);cn++;i++;}else if(cn>0){cn = nexts[cn];}else{nexts.push_back(0);i++;}}}int strStr(string &source, string &target) {int len1 = source.size();int len2 = target.size();if(len2>len1)return -1;cal_next(target);int pos1 = 0 , pos2 = 0;while(pos1<len1&&pos2<len2){if(source[pos1]==target[pos2]){pos1++;pos2++;}else if(pos2>0){pos2 = nexts[pos2];}else{pos1++;}}return pos2==len2?pos1-pos2:-1;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72330.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事件流、事件冒泡、阻止冒泡

1、事件流 2、事件冒泡&#xff1a;从小到大 概念&#xff1a; 当一个元素的事件被触发时&#xff0c;同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡 <style> .father{width: 300px;height: 300px;background-color: pink; } .son{width:…

Zookeeper框架

Zookeeper框架概述 1.Zookeeper介绍 Zookeeper&#xff08;以下简称ZK&#xff09;是用来管理和协调其他框架的&#xff0c;很多框架需要依赖ZK&#xff08;例如Hadoop-HA&#xff0c;Kafka&#xff0c;HBase等&#xff09;ZK本身也是一个集群ZK本身也可以存数据(一般保存配置…

koa中间件的实现原理

koa中间件的实现原理如何&#xff1f;先来看一个例子。koa的执行顺序是这样的&#xff1a;const middleware asyncfunction (ctx, next) {console.log(1)await next()console.log(6) }const middleware2 asyncfunction (ctx, next) {console.log(2)await next()console.log(5…

LeetCode 535. TinyURL 的加密与解密

TinyURL 是一种 URL 简化服务&#xff0c; 比如&#xff1a;当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时&#xff0c;它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。 加密和解密算法如何设计和运作是没有限…

产品新说 | 指标异常?怎么做能更好配合业务变化(一)

​ 背景&#xff1a; 企业业务运营的平稳&#xff0c;常常要依靠智能运维在后方保驾护航。熟悉运维的肯定都知道&#xff0c;在智能运维中有一环是通过监控指标来判断系统、云、业务应用、网络设备等运行的是否健康&#xff0c;以便及时排障维稳后台。在指标异常检测中&#xf…

读书笔记//来自公众号(2)

非常喜欢阅读同行的文章&#xff0c;彷佛进行一场隔空交流。大家都是数据分析师&#xff0c;有许多共鸣&#xff1b;了解数据分析在不同行业的应用&#xff0c;往往很有收获。 这位朋友在零售行业、工业物联网、汽车互联网、2G电商等做个数据分析&#xff0c;有10多工作经验。…

opencv在windows下环境搭建遇到问题

文章目录debug模式下执行到cv::imshow()报内存异常qt配置opencv环境出现的问题debug模式下执行到cv::imshow()报内存异常 原因是&#xff1a;在添加静态库的时候opencv_world460.lib和opencv_world460d.lib都导入了。 在debug模式下只能导入opencv_world460d.lib动态库&#xf…

OpenGL 渲染管线与显卡可执行程序

渲染管线的六个步骤 OpenGL 渲染管线的六个步骤&#xff0c;从指定几何图元到帧缓冲区写入像素&#xff0c;图像就被 OpenGL 引擎一步步地渲染到屏幕&#xff08;FBO&#xff09;上去了。 指定几何对象 OpenGL 引擎会根据开发者的指令去绘制几何图元。OpenGL&#xff08;ES&…

IMX6ULL学习笔记(17)——工程管理

一、简介 之前我们把所有源码文件放在一个文件夹下。 这样做存在两个主要问题&#xff0c;第一&#xff0c;代码存放混乱不易阅读。第二&#xff0c;程序可移植性差。如果工程源文件达到几十、甚至数百个的时候&#xff0c;这样一股脑全部放到根目录下就会使工程显得混乱不堪。…

[JavaEE系列] 详解面试中HTTP协议HTTPS协议

文章目录HTTP不安全HTTPS中的加密算法对称加密非对称加密混合加密HTTPS中的摘要算法HTTPS中的数字证书SSL /TLS握手TCP建立连接&#xff08;三次握手&#xff09;三次握手中常见的面试题&#xff1a;TCP断开连接&#xff08;四次挥手&#xff09;四次挥手中常见的面试题&#x…

前端页面开发模块组织结构

模块组织 任何超过 1000 行的 CSS 代码,你都曾经历过这样的体验: 这个 class 到底是什么意思呢?这个 class 在哪里被使用呢?如果我创建一个 xxoo class,会造成冲突吗?Reasonable System for CSS Stylesheet Structure 的目标就是解决以上问题,它不是一个框架,而是通过…

2.5|1.3 操作系统与嵌入式操作系统概述

CPU是计算机系统的心脏&#xff0c;操作系统是计算机系统的大脑。半个世纪以来操作系统这门软件科学吸引了世界上一大群最热情、最有智慧的杰出人材&#xff0c;集中了人类现代创造性思维活动的精髓。操作系统是软件世界的万花筒、世博会&#xff0c;是软件王国中的一顶璀璨的皇…

十二、Django表单

表单 在之前的案例中&#xff0c;每次我们需要提交表单数据的时候。我们都需要去手动编辑html表单&#xff0c;根据不同的字段&#xff0c;字段名&#xff0c;进行编码。做了很多重复的部分&#xff0c;所以django提供了一个专门用来处理表单的类&#xff0c;django.forms.For…

代码随想录算法训练营第六天 |哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集 、202. 快乐数、 1. 两数之和

打卡第六天&#xff0c;补昨天的卡 今日任务 哈希表理论基础242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和 哈希表理论基础 哈希表是根据关键码的值而直接进行访问的数据结构。 哈希表能解决什么问题呢? 一般哈希表都是用来快速判断一个元素是否出现集合里。 …

Tr0ll1靶机训练

信息收集 主机探测 端口扫描 21,22,80端口开放通过浏览器访问并进行指纹识别&#xff0c;并没没有发现什么有用信息 测试 观察发现21端口开放&#xff08;ftp&#xff09;尝试进行匿名登录发现其中存在一个流量文件将其下载 并将文件用wirwshark打开&#xff0c;追踪其TCP流(…

BEV感知:DETR3D

3D检测&#xff1a;DETR3D前言MethodImage Feature Extracting2D-to-3D Feature TransformationLoss实验结果前言 在这篇paper&#xff0c;作者提出了一个更优雅的2D与3D之间转换的算法在自动驾驶领域&#xff0c;它不依赖于深度信息的预测&#xff0c;这个框架被称之为DETR3D…

【C进阶】数据的存储

文章目录:star:1. 数据类型:star:2. 整形在内存中的存储2.1 存储规则2.2 存储模式2.3 验证大小端模式:star:3. 数据范围3.1 整形溢出3.2 数据范围的求解3.3 练习:star:4. 浮点型在内存中的存储4.1 浮点数的存储规则4.2 练习5. :star::star:总结(思维导图)⭐️1. 数据类型 在了…

Android - 代码生成远程依赖库(阿里云)

一、注册 没有注册过阿里云且没有实名认证的点这里&#xff1a;阿里云官网 二、查看库 阿里云制品仓库Packages &#xff08;注&#xff1a;如果没有创建企业或个人使用&#xff0c;按照提示&#xff0c;选个人使用&#xff09; 三、选择类型 选择其中一个&#xff08;两…

传统巨头生“变”,中国毫米波雷达市场战火再升级

进入2023年&#xff0c;中国车载毫米波雷达市场战火明显升级。 一方面&#xff0c;愈演愈烈的份额抢夺战不仅仅存在于几大传统巨头之间&#xff0c;也快速转移到与国产供应商之间&#xff1b;随着部分外资巨头的本土化战略深入落地&#xff0c;同时对国产供应商造成了压力。 …

ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境

ur3robotiq ft sensorrobotiq 2f 140配置gazebo仿真环境 搭建环境&#xff1a; ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 通过上一篇博客配置好ur3、力传感器和robotiq夹爪的rviz仿真环境后&#xff0c;现在来配置一下对…