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,不可能组成顺子!

京公网安备 11010502036488号