题目
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,记录初次索引,次数+1if (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;}
};