文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个整数数组 cards ,其中 cards[i] 表示第 i 张卡牌的 值 。如果两张卡牌的值相同,则认为这一对卡牌 匹配 。
返回你必须拿起的最小连续卡牌数,以使在拿起的卡牌中有一对匹配的卡牌。
如果无法得到一对匹配的卡牌,返回 -1 。
示例 1:
输入:cards = [3,4,2,3,4,7]
输出:4
解释:拿起卡牌 [3,4,2,3] 将会包含一对值为 3 的匹配卡牌。注意,拿起 [4,2,3,4] 也是最优方案。示例 2:
输入:cards = [1,0,5,3]
输出:-1
解释:无法找出含一对匹配卡牌的一组连续卡牌。提示:
1 <= cards.length <= 10^5
0 <= cards[i] <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-consecutive-cards-to-pick-up
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 哈希记录最近的一个 某数字 的下标
class Solution {
public:int minimumCardPickup(vector<int>& cards) {unordered_map<int, int> idx;int ans = INT_MAX, n = cards.size();for(int i = 0; i < n; ++i){if(idx.find(cards[i])!=idx.end()){ans = min(ans, i-idx[cards[i]]+1);}idx[cards[i]] = i;}return ans==INT_MAX ? -1 : ans;}
};
252 ms 112.3 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!