首页 > 代码库 > 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 }
View Code

Uva11572-Unique Snowflakes(滑动窗口)