Uva 11572 唯一的雪花


題目鏈接:https://uva.onlinejudge.org/external/115/11572.pdf

題意:找到一個盡量長的連續子序列 A~ AR ,使得該序列沒有相同的元素。

分析:枚舉超時,怎么優化呢? 當我不停的將右端點右移,當我移不動的時候,說明之前的 l ~ r  里面有一個和 r++的元素相同。

但是,不代表 l ~ r 就沒有用了,他本身還是有作用的,只要將 l 右移即可。這樣,單看這里,時間復雜度為O(n) ,

然后就是查看 r++ 的元素是否和前面的相同,用 set 集合,時間復雜度是 O(log n) ;

 1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 const int maxn = 1000000 + 5;
6
7 int a[maxn];
8
9 int main()
10 {
11 int t;
12 cin>>t;
13 while(t--) {
14 int n;
15 cin>>n;
16 for(int i=0;i<n;i++)
17 cin>>a[i];
18
19 set<int> s;
20 int L = 0;
21 int R = 0;
22 int ans = 0;
23 while(R<n) {
24 while(R<n&&!s.count(a[R])) s.insert(a[R++]);
25 ans = max(ans,R-L);
26 s.erase(a[L++]);
27 }
28 cout<<ans<<endl;
29 }
30
31 return 0;
32 }
View Code

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: