哈希表映射数量关系的取牌题——846. 一手顺子

Posted C+++++++++++++++++++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希表映射数量关系的取牌题——846. 一手顺子相关的知识,希望对你有一定的参考价值。

题目


OJ平台

解题思路

哈希表+堆 实现的取数逻辑。

  • 哈希表:存下所有牌的数量和数字的映射关系。
  • 堆:得到一组数的开始数字,然后根据这个数遍历一组数字进行取数,在遍历的同时把哈希表更新(当前牌的情况),一旦无法组成一组数字则 return false

解题代码

//TODO 解题思路:
// 1.思路不要被"模拟"二字带偏,虽说是利用哈希表模拟,但不是真的把对应的组排动作模拟下来,哈希表只是提前记录有哪些牌!
// 2.对于每一组,我们只需要找到它的头,然后直接往后遍历groupSize长度来取牌。
// 3.每次取牌通过哈希表把该牌的数量-1即可。

//TODO 哈希表仅仅用来记录牌的数量映射关系!方便取牌而已
class Solution 
public:
    bool isNStraightHand(vector<int>& hand, int groupSize) 
        priority_queue<int,vector<int>,greater<int>>pq(begin(hand),end(hand));
        unordered_map<int,int>check;
        for(auto& t:hand)check[t]++;
        while(!pq.empty())
            int t = pq.top();pq.pop();
            if(check[t]==0)//TODO 这个牌已经被取为一组了,跳到下一张
                continue;
            for(int i=0;i<groupSize;i++)
                if(check[t+i]==0)   //TODO 不可能形成一组了,因为牌被取完了
                    return false;
                check[t+i]--;
            
        
        return true;
    
;

以上是关于哈希表映射数量关系的取牌题——846. 一手顺子的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《846》《1296》|一手顺子 划分数组为连续数字的集合

LeetCode 846 一手顺子[Map 排序] HERODING的LeetCode之路

LeetCode 846 一手顺子[Map 排序] HERODING的LeetCode之路

LeetCode 472. 连接词(字典树+回溯) / 1995. 统计特殊四元组(标记这个题) / 846. 一手顺子

《LeetCode之每日一题》:251.一手顺子

《LeetCode之每日一题》:251.一手顺子