Unique Snowflakes

Emily the entrepreneur has a cool business idea: packaging and selling snowflakes. She has devised a machine that captures snowflakes as they fall, and serializes them into a stream of snowflakes that flow, one by one, into a package. Once the package is full, it is closed and shipped to be sold. The marketing motto for the company is “bags of uniqueness.” To live up to the motto, every snowflake in a package must be different from the others. Unfortunately, this is easier said than done, because in reality, many of the snowflakes flowing through the machine are identical. Emily would like to know the size of the largest possible package of unique snowflakes that can be created. The machine can start filling the package at any time, but once it starts, all snowflakes flowing from the machine must go into the package until the package is completed and sealed. The package can be completed and sealed before all of the snowflakes have flowed out of the machine.
Input
The first line of input contains one integer specifying the number of test cases to follow. Each test case begins with a line containing an integer n, the number of snowflakes processed by the machine. The following n lines each contain an integer (in the range 0 to 109, inclusive) uniquely identifying a snowflake. Two snowflakes are identified by the same integer if and only if they are identical. The input will contain no more than one million total snowflakes.
Output
For each test case output a line containing single integer, the maximum number of unique snowflakes that can be in a package.
Sample Input
1
1
Sample Output
3
详细题解:
首先我们来说一下这个题的题意是怎样的:我们有一个长度不超过一百万的序列,而题要求我们求出这个序列中连续的不含有重复元素的最长子序列的长度。
可以采用经典的滑动窗口的方法,即维护一个窗口,窗口的左右边界用两个变量left,right表示,先增加right直到出现重复元素,再增加left,再增加right,直到序列末尾。
对于一个序列,要找出连续的不含有重复元素的最长子序列,我们可以从第一个元素开始寻找,这个寻找的序列向后延伸,如果碰到一个序列中已经存在的元素,就缩短一个序列的头,如果这个已经存在的元素还存在于缩短的元素中,那么就继续缩短,直到将重复元素第一次出现的那个元素踢出序列。之后继续延伸知道原序列结束。最终的那个序列就是我们要找的序列,求出其长度即可。下面附上图加深理解吧:(这里我们随便建一个序列:2 3 4 5 6 7 5 8 9 12)
了解了思路,要怎么才能实现呢?这里我们引入一个set容器的知识进行实现。set容器的知识我会在另外一篇博客中阐明。(博客标题为“set容器”)
下面附上AC代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
#define MAX 1000000+5
int a[MAX];
int main(){set<int> s;int t,n;while(cin>>t){while(t--){cin>>n;for(int i=0;i<n;i++)cin>>a[i];s.clear();int left=0,right=0,ans=0;while(right<n){while(right<n&&!s.count(a[right]))s.insert(a[right++]);ans=max(ans,right-left);s.erase(a[left++]);  }cout<<ans<<endl;}}return 0;
}
同样的思路,我们利用数组来进行求解。
创建一个数组pos[]用于记录每个元素所在的位置,这个数组初始化-1;用一个变量start来记录当前序列的起始位置,初始值为0;
然后枚举这个数列,依次记录每个元素的位置。
在记录元素位置之前,要先判断当前元素的位置pos[a[i]]是否大于等于start,如果大于,说明在之前这个元素已经出现过一次即已经在(start,i-1)中出现过;记下这个满足条件的子序列。继续枚举下一个子序列:start=pos[a[i]]+1。最终算出这几个符合条件的子序列中最长的子序列即可。
下面附上AC代码:
#include<stdio.h>
#include<string.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define MAX 1000000+10
using namespace std;
int a[MAX],pos[MAX];
int main(){int t,n;while(cin>>t){while(t--){cin>>n;for(int i=0;i<n;i++)cin>>a[i];memset(pos,-1,sizeof(pos));int start=0,ans=0;a[n]=a[n-1];for(int i=0;i<=n;i++){if(pos[a[i]]>=start){int k=i-start;ans=max(ans,k);start=pos[a[i]]+1;pos[a[i]]=i;}elsepos[a[i]]=i;}cout<<ans<<endl;}}return 0;
}

Unique Snowflakes 详细题解相关推荐

  1. 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)

    文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 今天终于出核酸检测的结果,还好大家都没事,不然怕是要封城了!!! 今天还是寒假 ...

  2. 【寒假每日一题】分巧克力(个人练习)详细题解+推导证明(第八天)附带转载程序员壁纸

    文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 话说今天开始准备搞一个秋招的GitHub,算是复习一遍了. 今天还是寒假每日一 ...

  3. CTF-Web小白入门篇超详细——了解CTF-Web基本题型及其解题方法 总结——包含例题的详细题解

    很久之前经过一次比赛的打击,决定不能只是一直盲目的刷基础题,应该加快进度,从各种基本题型开始下手,每种题型都应该去找题目刷一刷,并做好总结.于是我去搜了一些总结的文章,便找到了一篇很好的,觉得看完后有 ...

  4. 2022腾讯前端实习生笔试题与部分详细题解

    2022腾讯前端实习生笔试题与部分详细题解 前言与详细题目和个人题解 一.根据给定深度实现数组的扁平化 二.股票买入卖出收益最大化 欢迎交流和指正 前言与详细题目和个人题解 4月24晚举行的笔试,我做 ...

  5. 【寒假每日一题】十三号星期五(个人练习)详细题解+推导证明(第十三天)

    文章目录 前言 题目 详细题解 写法1 O(n)O(n)O(n) 推导证明 举一反三 总结 前言 这一周的题,真的是很扎实的基础题. 今天的题目是来自usaco training 1.2. 最近在家呆 ...

  6. 【寒假每日一题】数字三角形(个人练习)详细题解+推导证明(第二天)

    文章目录 前言 题目 详细题解 写法1 O ( n 2 ) O(n^2) O(n2) 推导证明 写法2 O ( n 2 ) O(n^2) O(n2) 推导证明 举一反三 总结 前言 昨天真是人生中奇葩 ...

  7. Unique Snowflakes(2021-TRN1-M)

    Unique Snowflakes(2021-TRN1-M) 打完此题查了一下,居然是uva的题目... 更没有想到这种题目有固定方法...看的书还是嫌少了. 题目大意 传送门 大意只有一句话:给你一 ...

  8. 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解

    文章目录 原题展示 原题分析 详细题解 LED模块 按键模块 串口 LCD模块 模拟电压读取(ADC) 脉冲输入输出 文章福利 原题展示 原题分析   本届国赛试题主要包含LCD.LED.按键.EEP ...

  9. 【寒假每日一题】棋盘挑战(个人练习)详细题解+推导证明(第十六天)

    文章目录 前言 题目 详细题解 写法1 推导证明 举一反三 总结 前言 今天是经典的深度优先搜索问题,即八皇后问题. 作为经典问题,我发现了一种新的写法,不需要开二维数组即可完成. 题目 给定一个 N ...

最新文章

  1. yii 操作数据库的三种方法
  2. 机器学习-线性回归scikit-learn
  3. Webpack5构建微前端和Web应用程序2022教程
  4. [2020年]研究生数学建模竞赛题目分享
  5. window xp共享文件夹
  6. 诺贝尔获奖者中村修二:东亚教育问题的根源在哪?
  7. javascript书签工具
  8. HDU 5698 瞬间移动 (组合数 + 阶乘逆元)
  9. mmdetection(2): DeformableConvNets(DCN)
  10. 电脑网络通过usb分享给手机
  11. Bumped Map And Normal Map
  12. android平台的一款mud工具,全平台 MUD 客户端 TinTin++ 之安卓篇
  13. HTML简介:标记型解释型的语言
  14. django 配置swagger 以及登录登出,以及自定义参数
  15. c语言程序设计(微课版),C语言程序设计教程(微课版)
  16. 数字图像处理(第四版)胡学龙:编程实现图3.5中不同采样率图像的显示效果
  17. itchat和php,Python使用itchat 功能分析微信好友性别和位置
  18. windows安装.Net Framework3.5无法安装问题
  19. word 公式等号对齐和编号居右
  20. ai电销机器人系统搭建开发-通话模块

热门文章

  1. VS2010 MVC4下载地址
  2. 【转载】eMule电驴使用从入门到精通(4)-------电驴宗旨:我为人人,人人为我
  3. 什么是 SRS 呢?在我们大部分的音频播放器里都内欠有这种音效。
  4. 疫情已经结束,快递行业现状如何
  5. java 雷霆战机 教程,java swing实现简单的雷霆战机小游戏项目源码附带视频指导修改教程...
  6. 简单理解NLP中文分词
  7. 应用组件的名字与已安装应用有冲突
  8. SpringnMVC视图解析失败
  9. 关于深度学习云服务器推荐
  10. 数字金额转换为大写人民币汉字