题解 | 扑克牌顺子

扑克牌顺子

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

全部评论

相关推荐

07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司8个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-20 21:57
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务