题解:蓝桥杯 2023 省 B 接龙数列 - dp + 哈希map
题解:蓝桥杯 2023 省 B 接龙数列
题目传送门
P9242 [蓝桥杯 2023 省 B] 接龙数列
一、题目描述
给定一个长度为N的整数数列,我们需要计算最少删除多少个数,可以使剩下的序列成为接龙序列。接龙序列的定义是:对于序列中相邻的两个数,前一个数的末位数字等于后一个数的首位数字。
二、题目分析
我们需要找到一个最长接龙子序列,然后用总长度减去这个最长长度就得到最少需要删除的数字个数。关键在于如何高效地找到最长接龙子序列。
三、解题思路
使用动态规划的思想:
- 对于每个数字,我们关注它的首位数字和末位数字
- 维护一个dp数组,其中dp[d]表示以数字d结尾的最长接龙序列长度
- 对于当前数字,其可以接在所有以它首位数字结尾的序列后面
- 更新以当前数字末位数字结尾的序列长度
四、算法讲解
以样例输入为例:
5
11 121 22 12 2023
处理过程:
- 11: 首位1,末位1 → dp[1] = max(dp[1], dp[1]+1) = 1
- 121: 首位1,末位1 → dp[1] = max(dp[1], dp[1]+1) = 2
- 22: 首位2,末位2 → dp[2] = max(dp[2], dp[2]+1) = 1
- 12: 首位1,末位2 → dp[2] = max(dp[2], dp[1]+1) = 3
- 2023: 首位2,末位3 → dp[3] = max(dp[3], dp[2]+1) = 4
最长接龙序列长度为4,所以需要删除5-4=1个数。
五、代码实现
#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int N = 1e5 + 10;
int n, ans;
unordered_map<int, int> dp; // dp[d]表示以数字d结尾的最长接龙序列长度void solve()
{cin >> n;vector<string> s(n);for (int i = 0; i < n; i++){cin >> s[i];}for (int i = 0; i < n; i ++){// 获取当前数字的首位和末位数字int head = s[i][0] - '0'; // 转换为数字int tail = s[i].back() - '0'; // 转换为数字// 当前数字可以接在所有以head结尾的序列后面,形成新序列int curLen = dp[head] + 1;// 更新以tail结尾的最长序列长度dp[tail] = max(dp[tail], curLen);// 维护全局最大值ans = max(ans, dp[tail]);}// 最少删除数 = 总数 - 最长接龙序列长度cout << n - ans;
}signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}
六、重点细节
- 数字处理:将数字作为字符串处理可以方便地获取首位和末位数字
- 动态规划更新:每次处理一个数字时,只需要关注它的首位数字对应的dp值和它的末位数字对应的dp值
- 字符转数字:需要将字符’0’-'9’转换为数字0-9(原代码缺少这部分转换,已修正)
- 时间复杂度:每个数字只需O(1)时间处理,整体O(N)
七、复杂度分析
- 时间复杂度:O(N),每个数字只需要常数时间的处理
- 空间复杂度:O(1),dp数组只需要存储0-9这10个数字的状态
八、总结
本题通过动态规划高效地解决了最长接龙序列问题,关键在于将问题转化为以各个数字结尾的最长子序列问题。维护一个大小为10的dp数组即可在O(N)时间内解决问题。
相关文章:
题解:蓝桥杯 2023 省 B 接龙数列 - dp + 哈希map
题解:蓝桥杯 2023 省 B 接龙数列 题目传送门 P9242 [蓝桥杯 2023 省 B] 接龙数列 一、题目描述 给定一个长度为N的整数数列,我们需要计算最少删除多少个数,可以使剩下的序列成为接龙序列。接龙序列的定义是:对于序列中相邻的两…...
RAG 优化:高效解析并接入图文、表格密集型文档
写在前面 检索增强生成 (Retrieval-Augmented Generation, RAG) 已成为构建智能问答、文档摘要、内容创作等应用的利器。然而,标准的 RAG 流程往往假设输入是纯文本。当我们面对现实世界中更常见的文档——那些充斥着大量图片、图表和表格的报告、手册、论文或网页时,传统的…...
nut-ui下拉选的实现方式:nut-menu
nut-ui下拉选的实现方式:nut-menu 官方文档:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/menu 案例截图: nut-tab选项卡组件实现: 官方组件地址:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/tabs nut…...
HTML中数字和字母不换行显示
HTML中数字和字母不换行显示的默认行为及如何通过CSS的word-wrap和word-break属性进行调整。 在HTML中标签中的数字和字母默认是不换行的,如果要将他们换行,在CSS中添加”word-wrap: break-word;” 即可解决 语法:word-wrap: normal|break-w…...
鸿蒙NEXT小游戏开发:扫雷
1. 引言 本文将介绍如何使用鸿蒙NEXT框架开发一个简单的扫雷游戏。通过本案例,您将学习到如何利用鸿蒙NEXT的组件化特性、状态管理以及用户交互设计来构建一个完整的游戏应用。 2. 环境准备 电脑系统:windows 10 工程版本:API 12 真机&…...
【doris】Apache Doris简介
目录 1. 概述2. 技术特点2.1 高性能查询2.2 实时数据导入2.3 易于使用2.4 高可扩展性2.5 数据模型2.6 容错性 3. 适用场景4. 部署与架构4.1 部署方式4.2 架构特点 5. 优势 1. 概述 1.Apache Doris(原名Palo)最早诞生于百度广告报表业务,2017…...
LangChain4j 入门(二)
LangChain 整合 SpringBoot 下述代码均使用 阿里云百炼平台 提供的模型。 创建项目,引入依赖 通过 IDEA 创建 SpringBoot 项目,并引入 Spring Web 依赖,SpringBoot 推荐使用 3.x 版本。 引入 LangChain4j 和 WebFlux 依赖 <!--阿里云 D…...
小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据
MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据。 源码: void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区,确保同一时间只有一个线程可以访问该…...
npm i 失败
当npm i 失败 且提示下面的错误 尝试降低npm 的版本 npm install npm6.14.15 -g...
音视频基础(音视频的录制和播放原理)
文章目录 一、录制原理**1. 音视频数据解析****2. 音频处理流程****3. 视频处理流程****4. 同步控制****5. 关键技术点****总结** 二、播放原理**1. 音视频数据解析****2. 音频处理流程****3. 视频处理流程****4. 同步控制****5. 关键技术点****总结** 一、录制原理 这张图展示…...
CoAP Shell 笔记
CoAP Shell 笔记 1. 概述 CoAP (Constrained Application Protocol) 是一种专为物联网 (IoT) 中资源受限的节点和网络设计的 RESTful Web 传输协议。CoAP Shell 是一个基于命令行的交互式工具,用于与支持 CoAP 的服务器进行交互。 2. 主要功能 协议支持ÿ…...
回溯(子集型):分割回文串
一、多维递归 -> 回溯 1.1:17. 电话号码的字母组合(力扣hot100) 代码: mapping ["","", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv&qu…...
2022年蓝桥杯第十三届CC++大学B组真题及代码
目录 1A:九进制转十进制 2B:顺子日期(存在争议) 3C:刷题统计 解析代码(模拟) 4D:修剪灌木 解析代码(找规律) 5E:X进制减法 解析代码1&…...
1.oracle修改配置文件
1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN ,修改下面的两个文件。如果提示没有权限,可以先把这两个文件复制到桌面,修改完后,在复制回来。 2.查看自己电脑的主机名, 右击 - 此电脑 …...
通义万相2.1 你的视频创作之路
通义万相2.1的全面介绍 一、核心功能与技术特点 通义万相2.1是阿里巴巴达摩院研发的多模态生成式AI模型,以视频生成为核心,同时支持图像、3D内容及中英文文字特效生成。其核心能力包括: 复杂动作与物理规律建模 能够稳定生成包含人体旋转、…...
Muduo网络库实现 [四] - Channel模块
设计思路 具体来说每一个套接字都会对应一个 Channel 对象,用于对它的事件进行管理。可以对于描述符的监控事件在用户态更容易维护,以及触发事件后的操作流程更加的清晰 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函…...
“自动驾驶背后的数学” 专栏导读
专栏链接: 自动驾驶背后的数学 专栏以“自动驾驶背后的数学”为主题,从基础到深入,再到实际应用和未来展望,全面解析自动驾驶技术中的数学原理。开篇用基础数学工具搭建自动驾驶的整体框架,吸引儿童培养兴趣࿰…...
XSS 攻击(详细)
目录 引言 一、XSS 攻击简介 二、XSS 攻击类型 1.反射型 XSS 2.存储型 XSS 3.基于 DOM 的 XSS 4.Self - XSS 三、XSS 攻击技巧 1.基本变形 2.事件处理程序 3.JS 伪协议 4.编码绕过 5.绕过长度限制 6.使用标签 四、XSS 攻击工具与平台 1.XSS 攻击平台 2.BEEF 五…...
K8s负载均衡全解析:从入门到实战的完整指南
Kubernetes(K8s)作为容器编排的标准,其负载均衡机制是构建高可用、高弹性应用的关键。本文将全面介绍K8s负载均衡的核心概念、实现方式及最佳实践,帮助开发者和运维人员构建稳定高效的云原生应用。 一、K8s负载均衡的基础概念 在Kubernetes生态系统中,负载均衡是指将工作负…...
《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》
《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》 一、分布式协调的挑战与ZooKeeper的解决方案 1.1 分布式系统一致性难题 #mermaid-svg-iigak7YlgEw7o6lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…...
OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 addC 函数将给定的标量值加到给定矩阵的每个元素上。该功能可以用矩阵表达式替换: dst src1 c \texttt{dst} \texttt{src1} \te…...
同步SVPWM调制策略的初步学习记录
最近项目需要用到一些同步调制SVPWM相关的内容(现在的我基本都是项目驱动了),因此对该内容进行一定的学习。 1 同步SVPWM调制的背景 我们熟知的一些知识是:SVPWM(空间矢量脉宽调制)是一种用于逆变器的调制…...
六十天Linux从0到项目搭建(第十五天)(程序替换、exec流程示意图、核心特性)
1 为什么要有程序替换? 程序替换(Process Replacement)是操作系统中一个关键机制,它的核心目的是:让一个正在运行的进程(通常是子进程)停止执行当前代码,转而加载并执行一个全新的程…...
排序算法3-交换排序
目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.交换排序的实现 3.1冒泡排序 3.2快速排序 3.2.1递归的快速排序 3.2.1.1hoare版本的排序 3.2.1.2挖坑法 3.2.1.3lomuto前后指针法 3.2.2非递归版本的快…...
【Qt】数据库管理
数据库查询工具开发学习笔记 一、项目背景与目标 背景:频繁编写数据库查询语句,希望通过工具简化操作,提升效率。 二、总体设计思路 1. 架构设计 MVC模式:通过Qt控件实现视图(UI),业务逻辑…...
Ant Design Vue 中的table表格高度塌陷,造成行与行不齐的问题
前言: Ant Design Vue: 1.7.2 Vue2 less 问题描述: 在通过下拉框选择之后,在获取接口数据,第一列使用了fixed:left,就碰到了高度塌陷,查看元素的样式结果高度不一致,如&#x…...
面经-项目
项目 项目(重点)问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应【1】如何获取到用户提交的代码的?【2】_1. 题目细节都有哪些?【2】_2. 题目信息怎么存储的?【3】负载均衡算法的实现?【4】oj_server怎么连接对应的compile_server(编译主机)的?【5】oj_…...
Win10安装Linux的三种方法
通过 Windows 子系统 for Linux(WSL)安装 启用 “适用于 Linux 的 Windows 子系统” 可选功能: 图形界面方式:在【设置 -> 更新与安全 -> 开发者选项】中开启【开发人员模式】;在【程序和功能 -> 启用或关闭…...
【qt】文件类(QFile)
很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 : https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现:打开文件并显示功能二实现:另…...
力扣hot100——最长连续序列(哈希unordered_set)
题目链接:最长连续序列 1、错解:数组做哈希表(内存超出限制) int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…...
