剑指Offer61.扑克牌中的顺子

该博客介绍了一种解决编程面试题——扑克牌中的顺子的算法。代码实现了一个名为`isStraight`的函数,利用哈希表记录每种牌的数量,并通过遍历找出最小值和最大值,判断是否存在非0牌重复和非0牌之间的最大差距是否超过4(考虑万能牌)。若满足条件则返回true,否则返回false。
摘要由CSDN通过智能技术生成
  • 题目:剑指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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值