题目
解法1
利用hashmap保存每个数字和对应的index,遍历hashmap得到答案
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
unordered_map<int,vector<int>> memo;
for(int i=0;i<cards.size();i++){
memo[cards[i]].push_back(i);
}
int res = 1000000;
for(auto& el : memo){
int num = el.first;
vector<int> inds = el.second;
if(inds.size() == 1) continue;
for(int i=1;i<inds.size();i++){
res = min(res,inds[i]-inds[i-1]+1);
}
}
return res == 1000000 ? -1 : res;
}
};
解法2
可以在构造hashmap的时候直接取得答案,且无需保存所有index
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
unordered_map<int,int> memo;
int ans = INT_MAX;
for(int i=0;i<cards.size();i++){
if(memo.find(cards[i]) != memo.end()){
ans = min(ans,i-memo[cards[i]]+1);
}
memo[cards[i]] = i;
}
return ans == INT_MAX ? -1 : ans;
}
};