哈希表映射数量关系的取牌题——846. 一手顺子
Posted C+++++++++++++++++++
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希表映射数量关系的取牌题——846. 一手顺子相关的知识,希望对你有一定的参考价值。
题目
解题思路
哈希表+堆
实现的取数逻辑。
- 哈希表:存下所有牌的数量和数字的映射关系。
- 堆:得到一组数的开始数字,然后根据这个数遍历一组数字进行取数,在遍历的同时把哈希表更新(当前牌的情况),一旦无法组成一组数字则
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. 一手顺子