题解 | 扑克牌顺子
扑克牌顺子
https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型vector * @return bool布尔型 */ bool IsContinuous(vector<int>& numbers) { unordered_set<int> hash; int count = 0, min_num = 14, max_num = 0; for(auto x : numbers) { if(x == 0) count++; else { if(hash.count(x)) return false; hash.insert(x); if(x < min_num) min_num = x; if(x > max_num) max_num = x; } } if(count >= 4) return true; int gap = max_num - min_num; return gap <= 4; } };
思路:1. 当我们 0 的数量大于等于4了,那么剩下的一个数我们根本不关心,因为一定可以组成顺子 2. 当数组中 0 的数量小于4时,我们直接判断这个数组中最大值与最小值的差值,中间需要填3个数,也就是最大值与最小值的插值需要小于等于4,才能补齐整个数列!!!3. 当我们向 set 插入数据时,可以判断有没有除 0 之外的重复数据,如果有直接返回 false,不可能组成顺子!