算法题(135):唯一的雪花

审题:

本题需要我们对于每一组数据都找出最大的包裹大小

思路:

本题解析题目意思后我们可以把雪花的编号当成数组中元素的值,把包裹看成一个区间。

本质上就是让我们找出一组数据中,所有子段中最长的子段。

方法一:暴力解法

我们利用双层for循环遍历每一个子段,然后利用unordered_map来记录子段区间的对应编号出现次数

不过这样的话,由于内层的索引每次都要回到和外层索引一样的位置,内层循环的遍历次数就会比较多

方法二:滑动窗口(优化暴力解法)

简单来说就是一种指针不回退的搜索方法

当我们搜索到一个编号的雪花出现了两次的时候,我们就需要记录区间长度,然后将区间范围缩小,也就是left--。

此时我们的left可以移动到两个区域

第一个是非法区域:也就是仍然有出现了两次的编号在区间范围内的区域

第二个是合法区域:也就是出现了两次的编号已经有一个离开区间了的区域

若是非法区域,就算按照暴力解法将right回退也无法找到比当前更长的区间,所以没有必要回退

若是合法区域,即使回退了也还是要指回当前right的索引位置,所以也没有必要回退。

得出结论:无论如何right都不用回退

接下来我们看看滑动过程:

(1)初始状态

(2)滑动

当区间中仍然存在出现两次的编号,就不断left--缩短区间(此时不用记录长度,因为一定没有之前没缩短区间的时候长),直到合法为止,合法后即可记录区间长度,然后right++继续往后滑动。

解题:
 

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N = 1e6 + 10;
unordered_map<int, int> m;
int t, n;
int a[N];
int maxsize;
int main()
{cin >> t;while (t--){//清空上一组残留数据maxsize = 0;m.clear();//数据录入cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}//开始搜索int left = 1;for(int right = 1; right <= n; right++){++m[a[right]];while(m[a[right]] > 1)//继续缩短区间{m[a[left]]--;left++;}maxsize = max(maxsize, right - left + 1);}cout << maxsize << endl;}return 0;
}

1.数组a是不用重置的,因为我们每一组数据都会重新录入,且只访问到n,不会访问到残留数据

2.unordered_map和unordered_set的清空都是使用clear

3.由于right索引位置也是属于区间内的(区间左闭右闭),所以我们进行size计算的时候需要再加个1

UVA11572 唯一的雪花 Unique Snowflakes - 洛谷

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

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

相关文章

算法习题-力扣446周赛题解

算法可以调度思维&#xff0c;让程序员的思维发散&#xff0c;找到更好的解决方案。 第一题&#xff1a;执行指令后的得分 题目&#xff1a; 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。你需要根据以下规则模拟一个过程&#xff1a; 从下标…

Ubuntu下MySQL的安装

Ubuntu下MySQL的安装 1. 查看当前操作系统版本2. 添加MySQL APT源2.1 访问下载页面&#xff0c;并下载发布包2.2 执行安装指令2.3 安装MySQL 3. 查看MySQL状态4. 设置开机自启动 1. 查看当前操作系统版本 通过命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 访问下…

航顺 芯片 开发记录 (一) 2025年4月27日19:23:32

芯片型号: HK32F030MF4P6 第一步:创建工程目录 inc :头文件目录 MDK-ARM : 工程根目录 (新建工程选择该目录) src :相关资源存放位置 官方函数库相关内容 官方函数库大致结构图 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…

Python 数据可视化进阶:精准插入图表到指定 Excel 工作表

Python 数据可视化进阶&#xff1a;精准插入图表到指定 Excel 工作表 在处理数据的过程中&#xff0c;我们常常需要将生成的图表精准地插入到已存在数据的 Excel 文件的指定工作表中。借助 Python 的强大库组合&#xff0c;这一操作得以高效实现。以下是经过优化和注释补充的代…

集成方案 | Docusign + 甄零科技,赋能企业海外业务高效增长!

本文将详细介绍 Docusign 与甄零科技的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 甄零科技是一家专注于数字化合同管理系统的 SaaS 解决方案提供商&#xff0c;致力于为企业打造“…

00-算法打卡-目录

1 数组 01-算法打卡-数组-二分查找-leetcode(704)-第一天-CSDN博客 02-算法打卡-数组-二分查找-leetcode(35)-第二天-CSDN博客 03-算法打卡-数组-二分查找-leetcode(34)-第三天_leetcode 34-CSDN博客 04-算法打卡-数组-二分查找-leetcode(69)-第四天-CSDN博客 05-算法打卡-数组…

剑指Offer(数据结构与算法面试题精讲)C++版——day21

剑指Offer&#xff08;数据结构与算法面试题精讲&#xff09;C版——day21 题目一&#xff1a;数据流的第k大数字题目二&#xff1a;出现频率最高的k个数字题目三&#xff1a;和最小的k个数对附录&#xff1a;源码gitee仓库 题目一&#xff1a;数据流的第k大数字 题目&#xff…

NCCL非阻塞non-blocking实现

NCCL (NVIDIA Collective Communications Library) 主要设计用于高性能的集体通信&#xff08;如all-reduce、broadcast等&#xff09;&#xff0c;但其核心函数默认是阻塞式的&#xff08;blocking&#xff09;&#xff0c;即函数返回时操作已完成。不过&#xff0c;你可以通过…

代码随想录算法训练营第60期第二十天打卡

大家好&#xff0c;今天我们继续进入二叉树的章节&#xff0c;二叉树章节应该已经过半了&#xff0c;大家再坚持一下&#xff0c;那么废话不多说&#xff0c;我们继续今天的内容。 第一题对应力扣编号为235的二叉搜索树的最近公共祖先 其实我们上次任务就接触过了二叉树的最近…

8.0 西门子PLC的S7通讯解析

PC与西门子PLC的S7通讯主要有如下几个步骤: 1. TCP的三次握手(由Socket对象自动完成) 2.发送访问请求:COTP 3. 交换通讯信息:setup Commnunication 一、发送访问请求:COTP 比如向PLC请求+以及PLC返回响应的一个实际例子如下: 发送PLC:----> 03 00 00 16 11 E0 …

Nacos-SpringBoot 配置无法自动刷新问题排查

背景 Nacos SpringBoot版本中&#xff0c;提供了NacosValue注解&#xff0c;支持控制台修改值时&#xff0c;自动刷新&#xff0c;但是今天遇见了无法自动刷新的问题。 环境 SpringBoot 2.2.x nacos-client&#xff1a;2.1.0 nacos-config-spring-boot-starter&#xff1a;0…

JAVA | 聚焦 OutOfMemoryError 异常

个人主页 文章专栏 在正文开始前&#xff0c;我想多说几句&#xff0c;也就是吐苦水吧…最近这段时间一直想写点东西&#xff0c;停下来反思思考一下。 心中万言&#xff0c;真正执笔时又不知先写些什么。通常这个时候&#xff0c;我都会随便写写&#xff0c;文风极像散文&…

基于开源技术体系的品牌赛道力重构:AI智能名片与S2B2C商城小程序源码驱动的品类创新机制研究

摘要&#xff1a;在数字经济与实体经济深度融合的背景下&#xff0c;品牌竞争已从单一产品力竞争转向生态化、技术化的赛道力竞争。本文以开源AI大模型、AI智能名片及S2B2C商城小程序源码为核心技术载体&#xff0c;构建"技术赋能-场景贯通-生态协同"三维分析框架&am…

【vue3】购物车实战:从状态管理到用户体验的全流程实现

在电商项目中&#xff0c;购物车是核心功能之一&#xff0c;需要兼顾数据一致性、用户体验和逻辑复杂度。 本文结合 Vue3 Pinia 技术栈&#xff0c;详细讲解如何实现一个高效且易用的购物车系统&#xff0c;重点剖析 添加购物车 和 头部购物车预览 的核心逻辑与实现细节。 一…

卡洛诗西餐厅,以“中式西餐”为核心战略

在餐饮市场的激烈竞争中&#xff0c;“本土化”是许多国际餐饮品牌难以跨越的鸿沟——要么因水土不服黯然退场&#xff0c;要么因过度妥协失去特色。然而&#xff0c;卡洛诗以“中式西餐”为核心战略&#xff0c;将西餐与国内饮食文化深度融合&#xff0c;不仅破解了西餐本土化…

28-29【动手学深度学习】批量归一化 + ResNet

1. 批量归一化 1.1 原理 当神经网络比较深的时候会发现&#xff1a;数据在下面&#xff0c;损失函数在上面&#xff0c;这样会出现什么问题&#xff1f; 正向传递的时候&#xff0c;数据是从下往上一步一步往上传递反向传递的时候&#xff0c;数据是从上面往下传递&#xff0…

【Linux网络】Http服务优化 - 增加请求后缀、状态码描述、重定向、自动跳转及注册多功能服务

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

AIGC(生成式AI)试用 32 -- AI做软件程序测试 3

总结之前的AI做程序测试过程&#xff0c;试图优化提问方式&#xff0c;整合完成的AI程序测试提问&#xff0c;探索更多可能的AI测试 AIGC&#xff08;生成式AI&#xff09;试用 30 -- AI做软件程序测试 1 AIGC&#xff08;生成式AI&#xff09;试用 31 -- AI做软件程序…

C语言实现迪杰斯特拉算法进行路径规划

使用C语言实现迪杰斯特拉算法进行路径规划 迪杰斯特拉算法是一种用于寻找加权图中最短路径的经典算法。它特别适合用于计算从一个起点到其他所有节点的最短路径&#xff0c;前提是图中的边权重为非负数。 一、迪杰斯特拉算法的基本原理 迪杰斯特拉算法的核心思想是“贪心法”…

引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?

当前 Web3 的发展正处于关键转折点&#xff0c;行业亟需吸引新用户以推动 Web3 的真正大规模采用。然而&#xff0c;大规模采用面临着核心挑战&#xff1a;数据泄露风险、集中存储的安全漏洞、跨系统互操作性障碍&#xff0c;以及低效的服务访问等问题。如何才能真正突破这些瓶…