UVa11572 Unique Snowflakes (贪心+尺取法+set容器)
2017-06-28 16:52
381 查看
题目链接:https://vjudge.net/problem/UVA-11572
题目大意:给你一段数字序列,从序列里取出一段子序列,要求子序列里没有重复的数字,让你求出子序列最大的长度是多少?
题目分析:序列的长度为1e6 那么n^2复杂度的算法基本被排除了,这里可以用到set,set的查找和输入都是logn级别的,那么我们只需要O(n)处理一下这个序列就好了
解决方法:尺取法,设l r ans ,根据贪心 r能取多大取多大,每次验证一下,如果不满足l++,在重复上一步,一直循环下去,直到r>=n
学到的东西:1>尺取法的应用:个人感觉关于求解有一定限制条件的序列的子序列的相关问题,尺取法可能会有发挥的地方
2>set的使用:查询数据是否重复时非常非常非常有用!!!
找到一篇大佬的博文,关于set的简单用法:http://blog.csdn.net/u010480899/article/details/52311316
代码:
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int main()
{
int T;while(~scanf("%d",&T)){
while(T--){
int n;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++]);//set的插入与查找
ans=max(ans,r-l);
s.erase(a[l++]);//set的删除
}
printf("%d\n",ans);
}
}
}
题目大意:给你一段数字序列,从序列里取出一段子序列,要求子序列里没有重复的数字,让你求出子序列最大的长度是多少?
题目分析:序列的长度为1e6 那么n^2复杂度的算法基本被排除了,这里可以用到set,set的查找和输入都是logn级别的,那么我们只需要O(n)处理一下这个序列就好了
解决方法:尺取法,设l r ans ,根据贪心 r能取多大取多大,每次验证一下,如果不满足l++,在重复上一步,一直循环下去,直到r>=n
学到的东西:1>尺取法的应用:个人感觉关于求解有一定限制条件的序列的子序列的相关问题,尺取法可能会有发挥的地方
2>set的使用:查询数据是否重复时非常非常非常有用!!!
找到一篇大佬的博文,关于set的简单用法:http://blog.csdn.net/u010480899/article/details/52311316
代码:
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int main()
{
int T;while(~scanf("%d",&T)){
while(T--){
int n;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++]);//set的插入与查找
ans=max(ans,r-l);
s.erase(a[l++]);//set的删除
}
printf("%d\n",ans);
}
}
}
相关文章推荐
- Uva11572 Unique Snowflakes【滑动窗口】【例题8-7】
- uva 11572 Unique Snowflakes
- uva 11572 unique snowflakes——yhx
- UVA - 11572 Unique Snowflakes(唯一的雪花) : 滑动窗口
- UVa 11572 - Unique Snowflakes (好题)
- uva 11572 Unique Snowflakes
- uva 11572 unique snowflakes——yhx
- uva 11572 unique snowflakes
- uva 11572 - Unique Snowflakes(和书略有不同)
- uva 11572 - Unique Snowflakes(与书上方法略有不同)
- UVa11572 - Unique Snowflakes(最长的不重复的子数组)
- UVA 11572 Unique Snowflakes
- UVA 11572 Unique Snowflakes (滑动窗口)
- UVA - 11572 Unique Snowflakes
- UVA 11572(p239)----Unique snowflakes
- UVA 11572 Unique Snowflakes(滑窗|双指针)
- Uva - 11572 - Unique Snowflakes
- UVA - 11572 Unique Snowflakes 滑动窗口
- UVA 11572 Unique Snowflakes
- Uva - 11572 - Unique Snowflakes