首页 > 代码库 > Uva11572-Unique Snowflakes(滑动窗口)
Uva11572-Unique Snowflakes(滑动窗口)
Means:
给你一串数列,问你这串数列的子串内没有重合的数,这串子串最大是多少。
Solve:
滑动窗口问题,设置两个指针l , r为起点,如果满足要求r++,不满足的话删除左区间元素,直到r遍历完数列
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define CLR(x , v) memset(x , v , sizeof(x)) 4 static const int MAXN = 1e6 + 10; 5 int t , n; 6 int data[MAXN]; 7 set<int> s; 8 int ans = 0; 9 int main()10 {11 scanf("%d" , &t);12 while(t--)13 {14 CLR(data , 0);15 s.clear();16 ans = 0;17 scanf("%d" , &n);18 for(int i = 1 ; i <= n ; ++i)19 scanf("%d" , data + i);20 int l = 1 , r = 1;21 while(r <= n)22 {23 while(r <= n && !s.count(data[r]))24 s.insert(data[r++]);25 int si = s.size();26 ans = max(ans , si);27 s.erase(data[l++]);28 }29 printf("%d\n" , ans);30 }31 }
Uva11572-Unique Snowflakes(滑动窗口)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。