蓝桥账户中心
用哈希表查看当前状态
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{int n; cin >> n;int num[1001] = {0}; //记录出现次数 int cnt = 0; //记录不同个数vector<int> vec;set<int> s; //获取个数int diff; //代表不同的数字个数 int left = 0, right = 0;int ans = 10000000;for ( int i = 0; i < n; ++i ){ //输入数据 int tmp; cin >> tmp;vec.push_back(tmp);s.insert(tmp);}diff = s.size();for ( right; right < n; ++right){ //开始滑动窗口int pos = vec[right]; cnt += num[pos] == 0 ? 1 : 0; //更新窗口内不同数的数量 num[pos] += 1;while ( cnt == diff ){ //判断不同数字的数量 cnt -= num[vec[left]] == 1 ? 1 : 0;num[vec[left++]] -= 1;ans = ans < right - left + 1 ? ans : right - left + 2;}}cout << ans << endl;return 0;
}