剑指Offer61.扑克牌中的顺子

  • 题目:剑指Offer61.扑克牌中的顺子
    A对应1,2 ~ 10对应2 ~ 10,JQK对应11,12,13,大小王为万能牌;
    输入一个长为5的数组,判断是否能构成一个链(类似于1,2,3,4,5)

  • 思路:
    1.益智题:时间O(n):遍历一次,空间O(n):需要一个大小为5的哈希表
    满足要求的条件:① 非0牌不能重复 ② 非0牌差距不能过大,例如要想构成1,2,3,4,5,非0牌的的边界为1和5,其它牌只能位于1,5之间或有大小王;

class Solution {
    
    
public:
    bool isStraight(vector<int>& nums) {
    
    //5张牌,取值为[0, 13]
        int set[14] = {
    
    0};//
        int minVal = 14, maxVal = -1;
        for (auto x : nums) {
    
    
            ++set[x];
            if (x != 0) {
    
    
                if (set[x] > 1) return false;//非0牌重复了
                minVal = min(minVal, x);
                maxVal = max(maxVal, x);
                if (maxVal - minVal > 4) return false;//非0牌差距过大,即便靠万能牌也连不起来
            }
        }
        
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/jiuri1005/article/details/114447002