题目:

输入一个长度为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);}
} 

(连续子序列)唯一的雪花相关推荐

  1. HDU 1231 最大连续子序列

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  2. 最大连续子序列(dp)

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,  Nj },其中 1 <= i < ...

  3. 九度OJ 1011:最大连续子序列 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5615 解决:2668 题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...

  4. HDU 1231 最大连续子序列:水dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...

  5. HDOJ 1231 最大连续子序列

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. 动态规划 HDU1231-------最大连续子序列

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...

  7. Codeup-问题 A: 最大连续子序列

    题目描述 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连 ...

  8. HDU1231(最大连续子序列)

    给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子序列是 ...

  9. 最大连续子序列----DP动态规划

    1196: 最大连续子序列 时间限制: 1 Sec  内存限制: 128 MB 提交: 44  解决: 20 [提交][状态][讨论版] 题目描述 给定 K 个整数的序列{ N1,  N2,  ... ...

最新文章

  1. 真是没想到,Springboot + Flowable 开发工作流会这么简单!
  2. Java中比较对象的两个接口Comparable接口和Comparator接口
  3. cdn托管html资源,七牛自定义域名cdn加速,静态资源托管至对象存储
  4. php 编程祝新年快乐_AnyCodes:免费的在线编程神器
  5. 建一所希望小学需要600万!
  6. ML之ECS:利用ECS的PAI进行傻瓜式操作机器学习的算法
  7. linux 查看共享内存最大值,linux上更改共享内存的最大值
  8. 自定义拦截器用于用户登录的
  9. javascript图片轮播技术动态实现
  10. js浏览器回到顶部方法_基于JS实现回到页面顶部的五种写法(从实现到增强)
  11. SpringMVC 参数绑定注解解析
  12. 4 软件业务分析要点
  13. 一次让你搞懂Android应用签名
  14. 阿里成立“平头哥”半导体公司,明年推神经网络芯片
  15. 论文笔记——CPN(Corner-Proposal-Network)Det
  16. ReThought (二): 如何照顾团队中的新人
  17. 心情不美丽,爬了一些美图,独自欣赏!
  18. 三星android q,三星Galaxy S11再被爆料 系统将基于Android Q
  19. Qt Creator 添加大恒相机SDK库
  20. Android Studio 与工具下载地址(谷歌、百度云、AndroidDevTools均可下载)

热门文章

  1. overflow滚动条属性
  2. C语言文本文件与二进制文件转换
  3. php+数组存放文件名_php将数组存储为文本文件的三种方法
  4. php转盘中奖率,PHP大转盘中奖概率算法实例_PHP
  5. exec go 重启_如何用 Go 实现热重启
  6. 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
  7. 谷歌浏览器的下载位置如何设置 Chrome浏览器下载路径设置方法简述
  8. win7本地连接不见了的修复方法
  9. MUI 拍照和从系统相册选择图片上传
  10. Java代理设计模式(Proxy)的具体实现:静态代理和动态代理