给你一个整数数组 cards
,其中 cards[i]
表示第 i
张卡牌的 值 。如果两张卡牌的值相同,则认为这一对卡牌 匹配 。
返回你必须拿起的最小连续卡牌数,以使在拿起的卡牌中有一对匹配的卡牌。如果无法得到一对匹配的卡牌,返回 -1
。
示例 1:
输入:cards = [3,4,2,3,4,7] 输出:4 解释:拿起卡牌 [3,4,2,3] 将会包含一对值为 3 的匹配卡牌。注意,拿起 [4,2,3,4] 也是最优方案。
示例 2:
输入:cards = [1,0,5,3] 输出:-1 解释:无法找出含一对匹配卡牌的一组连续卡牌。
提示:
1 <= cards.length <= 105
0 <= cards[i] <= 106
C++
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
unordered_map<int,int> mp;
int n=cards.size();
int res=n;
int flag=0;
for(int i=0;i<n;i++) {
if(mp.find(cards[i])==mp.end()) {
mp[cards[i]]=i;
} else {
res=min(res,i-mp[cards[i]]+1);
mp[cards[i]]=i;
flag=1;
}
}
if(flag==0) {
return -1;
}
return res;
}
};