Uva 11572 Unique snowflakes

xiaoxiao2021-02-28  68

比较简单的一道题目,一边遍历数据一边记录已经遍历的数据,同时在遍历的时候还要判断该数据是否之前已经被遍历过,如果被遍历过,那么就将该数据以及之前已经遍历到的数据清除,同时要注意记录遍历的数据的最大的长度,最后输出结果即可,具体实现见如下代码:

#include<iostream> #include<vector> #include<string> #include<set> #include<stack> #include<queue> #include<map> #include<algorithm> #include<cmath> #include<iomanip> #include<cstring> #include<sstream> #include<cstdio> #include<deque> #include<functional> using namespace std; int main(){ int T; cin >> T; int n; while (T--){ cin >> n; vector<int> v; for (int i = 0; i < n; i++){ int t; cin >> t; v.push_back(t); } set<int> s; int res = -1; int temp = 0; for (int i = 0; i < n; i++){ if (s.find(v[i]) == s.end()){ temp++; s.insert(v[i]); } else{ int ind = i - s.size(); while (ind < i&&v[ind]!=v[i]){ s.erase(v[ind]); ind++; temp--; } } res = max(res, temp); } cout << res << endl; } }

转载请注明原文地址: https://www.6miu.com/read-2350080.html

最新回复(0)