0
点赞
收藏
分享

微信扫一扫

Leetcode 2260. Minimum Consecutive Cards to Pick Up

炽凤亮尧 2022-05-04 阅读 57

题目

在这里插入图片描述

解法1

利用hashmap保存每个数字和对应的index,遍历hashmap得到答案

class Solution {
public:
    int minimumCardPickup(vector<int>& cards) {
        unordered_map<int,vector<int>> memo;
        for(int i=0;i<cards.size();i++){
            memo[cards[i]].push_back(i);
        }
        int res = 1000000;
        for(auto& el : memo){
            int num = el.first;
            vector<int> inds = el.second;
            if(inds.size() == 1) continue;
            for(int i=1;i<inds.size();i++){
                res = min(res,inds[i]-inds[i-1]+1);
            }
        }
        return res == 1000000 ? -1 : res;
    }
};

解法2

可以在构造hashmap的时候直接取得答案,且无需保存所有index

class Solution {
public:
    int minimumCardPickup(vector<int>& cards) {
        unordered_map<int,int> memo;
        int ans = INT_MAX;
        for(int i=0;i<cards.size();i++){
            if(memo.find(cards[i]) != memo.end()){
                ans = min(ans,i-memo[cards[i]]+1);
            }
            memo[cards[i]] = i;
        }
        return ans == INT_MAX ? -1 : ans;
    }
};
举报

相关推荐

0 条评论