Minimum Consecutive Cards to Pick Up [Medium] — HashMap Window

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro