2260. Minimum Consecutive Cards to Pick Up

Medium

You are given an integer array cards where cards[i] represents the value of the ith card. A pair of cards are matching if the cards have the same value.

Return the minimum number of consecutive cards you have to pick up to have a pair of matching cards among the picked cards. If it is impossible to have matching cards, return -1.

Example 1:

Input: cards = [3,4,2,3,4,7]
Output:
 4
Explanation:
 We can pick up the cards [3,4,2,3] which contain a matching pair of cards with value 3. Note that picking up the cards [4,2,3,4] is also optimal.

Example 2:

Input: cards = [1,0,5,3]
Output:
 -1
Explanation:
 There is no way to pick up a set of consecutive cards that contain a pair of matching cards.

Constraints:

  • 1 <= cards.length <= 105

  • 0 <= cards[i] <= 106

解題

因為他要求的是最小,所以我們可以建立一個map來記錄目前的值出現的index,當下次這個值又出現時,比較和之前出現的index間的距離是否是目前最小距離。

Runtime: 174 ms, faster than 87.18%

Memory Usage: 11.5 MB, less than 92.31%

func minimumCardPickup(cards []int) int {
    m := make(map[int]int)
    ans := 100001
    
    for i, card := range cards {
        if _, ok := m[card]; ok {
            if i - m[card] + 1 < ans {
                ans = i - m[card] + 1
            }
        }
        m[card] = i
    }
    
    
    if ans != 100001 { return ans }
    return -1
}

Last updated