题解 | #扑克牌顺子#

扑克牌顺子

http://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

用一个长度为14的数组来储存给出的5张牌中每张牌出现的次数。
遍历数组,将出现的数字在计数数组中对应的位置加1,若其加1后大于2,切其本身不为0,则返回false。因两张不为joker的牌重复则不可能为顺子。遍历时记录出现的最大值与最小值。
遍历完后用最大值减去最小值,若大于4则返回false,因为五张牌不可能组成相差大于5的顺子。否则返回true。

这种解法只用到一重循环,时间复杂度为O(n)。
关于空间复杂度,虽然用到了辅助数组,但该数组的大小固定为14(14张扑克牌),所以我个人认为这里空间复杂度为O(1)。

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        vector<int> counter(14,0);
        int max = 1;
        int min = 14;
        for(int i = 0; i < numbers.size();i++){
            counter.at(numbers.at(i))++;
            if(counter.at(numbers.at(i)) > 1 && numbers.at(i) != 0){
                return false;
            }
            if(numbers.at(i) != 0 && numbers.at(i) < min){
                min = numbers.at(i);
            }
            if(numbers.at(i) > max){
                max = numbers.at(i);
            }
        }
        if(max - min > 4){
            return false;
        }
        return true;
    }
};
全部评论

相关推荐

10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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