给你一个整数数组 cards
,其中 cards[i]
表示第 i
张卡牌的 值 。如果两张卡牌的值相同,则认为这一对卡牌 匹配 。
返回你必须拿起的最小连续卡牌数,以使在拿起的卡牌中有一对匹配的卡牌。如果无法得到一对匹配的卡牌,返回 -1
。
输入: cards = [3,4,2,3,4,7] 输出: 4 解释: 拿起卡牌 [3,4,2,3] 将会包含一对值为 3 的匹配卡牌。注意,拿起 [4,2,3,4] 也是最优方案。
输入: cards = [1,0,5,3] 输出: -1 解释: 无法找出含一对匹配卡牌的一组连续卡牌。
1 <= cards.length <= 105
0 <= cards[i] <= 106
use std::collections::HashMap;
impl Solution {
pub fn minimum_card_pickup(cards: Vec<i32>) -> i32 {
let mut indices = HashMap::new();
let mut ret = usize::MAX;
for i in 0..cards.len() {
if let Some(j) = indices.insert(cards[i], i) {
ret = ret.min(i - j + 1);
}
}
if ret == usize::MAX {
return -1;
}
ret as i32
}
}