Minimum Consecutive Cards to Pick Up [Medium] — HashMap Window
Advertisement
Problem Statement
Find the minimum number of consecutive cards you have to pick up to find at least one pair of matching cards. Return -1 if impossible.
Input: cards=[3,4,2,3,4,7] → Output: 4 ([3,4,2,3])
Intuition
For each card value, track its last seen index. If seen before, update min window = current_i - last_seen + 1.
Solutions
Python
def minimumCardPickup(cards: list[int]) -> int:
last = {}
ans = float('inf')
for i, c in enumerate(cards):
if c in last:
ans = min(ans, i - last[c] + 1)
last[c] = i
return -1 if ans == float('inf') else ans
C++
int minimumCardPickup(vector<int>& cards) {
unordered_map<int,int> last;
int ans=INT_MAX;
for(int i=0;i<cards.size();i++){
if(last.count(cards[i])) ans=min(ans,i-last[cards[i]]+1);
last[cards[i]]=i;
}
return ans==INT_MAX?-1:ans;
}
JavaScript
var minimumCardPickup = function(cards) {
const last=new Map(); let ans=Infinity;
for(let i=0;i<cards.length;i++){
if(last.has(cards[i])) ans=Math.min(ans,i-last.get(cards[i])+1);
last.set(cards[i],i);
}
return ans===Infinity?-1:ans;
};
Complexity
- Time: O(n), Space: O(n)
Advertisement