扑克牌顺子

扑克牌顺子

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

特判:如果size小于5 false 如果 有1个不为0的数且0的个数为4 true
思路:先排序计算再计算0的个数,然后去重。
去重之后暴力枚举所有1~5的子序列,检查相邻的差值-1的是否小于0的个数 并且 相邻的差值-1的和加上子序列的长度加上剩余0的个数是否大于等于5 如果满足则返回true
程序运行到底还无返回则默认返回false

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size() < 5) return false;
        sort(numbers.begin(), numbers.end());
        int zero = 0,l  = 0;
        while(numbers[zero] == 0) zero++;
        numbers.erase(unique(numbers.begin(),numbers.end()),numbers.end());
         while(numbers[l] == 0) l++;
        int b = 0;
        if(zero > 0) b = 1;
        if(zero == 4 && numbers.size()-b >= 1) return true;
        for(int i = l; i < numbers.size(); i ++) {
            int sum = 0;
            for(int j = i+1; (j <= i+4) && j < numbers.size(); j ++) {
                sum += numbers[j]-numbers[j-1]-1;
                if(sum <= zero && j-i+1+sum+zero-sum>=5) return true;
            }
        }
        return false;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务