(连续子序列)唯一的雪花
题目:
输入一个长度为n(n<=1e6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同元素。输出最大长度。
分析与解答
对于这种子序列问题我们采用模拟的方法
方法一:利用set
1.如果有一个序列的元素没出现过,就把元素存到set里,
2.如果出现过,说明a[r+1]在子序列a[l]——a[r]出现过,那此时就不断地删去l,直到r增大到n
注意这里并不是说我删掉最左边的,那么l+1到r+1就是一个新的满足条件的最长子序列,比如1,2,3,4,5,4,6,7,8,9
这里只不过是把所有可能情况走一遍
左边走,右边停着
右边走,左边停着
决定谁停的条件,就是r+1是不是曾经出现过,用set的count函数非常方便,而且set也有插入和删除,左边往前走,删除,右边往前走,插入
3.注意保存并更新最大序列个数
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=1000000+5;
int a[maxn];int main(){int t,n;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=0;i<n;++i) scanf("%d",&a[i]);set<int> s;int l=0,r=0,ans=0;while(r<n){while(r<n&&!s.count(a[r])) s.insert(a[r++]);ans=max(ans,r-l);s.erase(a[l++]);}printf("%d\n",ans);}
}
方法二
利用map
1.构造数组last[i],存的元素是下标i的上一个相同元素的下标
如果这个元素第一次出现,那么last[i]=-1
2.map分别存的是值和下标,cur[值]=下标
3.同样是有一个l,last[r]与l进行比较,如果小于,说明此时可以继续扩展
4.虽然麻烦,但是与抽屉原理异曲同工之妙
#include<stdio>
#include<map>using namespace std;const int maxn=1000000+5;
int a[maxn],last[maxn];
map<int,int>cur;int main(){int t,n;scanf("%d",&t);while(t--){scanf("%d",&n);cur.clear();for(int i=0;i<n;++i){scanf("%d",&a[i]);if(!=cur.count(a[i])) last[i]=-1;else last[i]=cur[a[i]];cur[a[i]]=i;//存a[i]的下标}int l=0,r=0,ans=0;while(r<n){while(r<n&&last[r]<l) r++;ans=max(ans,r-l);l++;}printf("%d\n",ans);}
}
(连续子序列)唯一的雪花相关推荐
- HDU 1231 最大连续子序列
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 最大连续子序列(dp)
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...
- 九度OJ 1011:最大连续子序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5615 解决:2668 题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...
- HDU 1231 最大连续子序列:水dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...
- HDOJ 1231 最大连续子序列
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 动态规划 HDU1231-------最大连续子序列
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...
- Codeup-问题 A: 最大连续子序列
题目描述 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连 ...
- HDU1231(最大连续子序列)
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子序列是 ...
- 最大连续子序列----DP动态规划
1196: 最大连续子序列 时间限制: 1 Sec 内存限制: 128 MB 提交: 44 解决: 20 [提交][状态][讨论版] 题目描述 给定 K 个整数的序列{ N1, N2, ... ...
最新文章
- 真是没想到,Springboot + Flowable 开发工作流会这么简单!
- Java中比较对象的两个接口Comparable接口和Comparator接口
- cdn托管html资源,七牛自定义域名cdn加速,静态资源托管至对象存储
- php 编程祝新年快乐_AnyCodes:免费的在线编程神器
- 建一所希望小学需要600万!
- ML之ECS:利用ECS的PAI进行傻瓜式操作机器学习的算法
- linux 查看共享内存最大值,linux上更改共享内存的最大值
- 自定义拦截器用于用户登录的
- javascript图片轮播技术动态实现
- js浏览器回到顶部方法_基于JS实现回到页面顶部的五种写法(从实现到增强)
- SpringMVC 参数绑定注解解析
- 4 软件业务分析要点
- 一次让你搞懂Android应用签名
- 阿里成立“平头哥”半导体公司,明年推神经网络芯片
- 论文笔记——CPN(Corner-Proposal-Network)Det
- ReThought (二): 如何照顾团队中的新人
- 心情不美丽,爬了一些美图,独自欣赏!
- 三星android q,三星Galaxy S11再被爆料 系统将基于Android Q
- Qt Creator 添加大恒相机SDK库
- Android Studio 与工具下载地址(谷歌、百度云、AndroidDevTools均可下载)
热门文章
- overflow滚动条属性
- C语言文本文件与二进制文件转换
- php+数组存放文件名_php将数组存储为文本文件的三种方法
- php转盘中奖率,PHP大转盘中奖概率算法实例_PHP
- exec go 重启_如何用 Go 实现热重启
- 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
- 谷歌浏览器的下载位置如何设置 Chrome浏览器下载路径设置方法简述
- win7本地连接不见了的修复方法
- MUI 拍照和从系统相册选择图片上传
- Java代理设计模式(Proxy)的具体实现:静态代理和动态代理