剑指offer 69- 扑克牌的顺子

2021-06-08  本文已影响0人  顾子豪

从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5张牌是不是连续的。

2∼10为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,大小王可以看做任意数字。

为了方便,大小王均以 0来表示,并且假设这副牌中大小王均有两张。
样例1

输入:[8,9,10,11,12]

输出:true

样例2

输入:[0,8,9,11,12]

输出:true

分析:
时间复杂度O(N)

1.先把数组元素排序
2.把0过滤掉
3.遍历剩下的数,看是否有相同的元素,有就返回false
4.判断数组末尾元素减去数组首元素是否小于等于4,是就返回true,否则返回false

class Solution {
public:
    bool isContinuous( vector<int> numbers ) {
        /*
        1.先把数组元素排序
        2.把0过滤掉
        3.遍历剩下的数,看是否有相同的元素,有就返回false
        4.判断数组末尾元素减去数组首元素是否小于等于4,是就返回true,否则返回false
        */
        if(numbers.empty()) return false;
        sort(numbers.begin(), numbers.end());
        int k = 0;
        while(!numbers[k]) k++;
        for(int i = k+1; i<numbers.size(); i++)
            if(numbers[i]==numbers[i-1]) return false;
        return numbers.back() - numbers[k] <= 4;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读