题目
![](https://i-blog.csdnimg.cn/direct/3923cef2fe8d42a58c84a228ac31163a.png)
697. 数组的度 - 力扣(LeetCode)
代码(首刷自解)
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
// 遍历一遍,记录每个数字的起始位置
// 当度更新时,记录最大新最大长度
int res = 1;//长度
unordered_map<int, pair<int, int>> um;// key: 值 value:初次索引,次数
int maxDo = -1;
for (int i = 0; i < nums.size(); i++) {
// 如果次数为0,记录初次索引,次数+1
if (um[nums[i]].second == 0) {
um[nums[i]].first = i;
um[nums[i]].second++;
}
// 如果次数不为0,次数+1,与最大次数作比较
else {
um[nums[i]].second++;
// 若最大次数较小,更新最大次数,更新长度
if (um[nums[i]].second > maxDo) {
maxDo = um[nums[i]].second;
res = i - um[nums[i]].first + 1;
}
else if (um[nums[i]].second == maxDo) { // 容易忽略,不加这个特殊条件会出错
res = min(res, i - um[nums[i]].first + 1);
}
}
}
//cout<<maxDo<<endl;
return res;
}
};