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
}