剑指offer-44.扑克牌顺子

本文介绍了一种判断五张扑克牌是否构成顺子的算法。通过排序和统计大小王数量及数字间隔来判断是否连续。关键在于处理大小王作为任意数字的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4?tpId=13&tqId=11198&tPage=3&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是否是连续的。2-10为数字本身,A看作1,J为11,Q为12,K为13。大王小王可以看成任意数字,输入 0 表示大王小王。

题解:
先给数组排序
统计数组中0的个数,和数组中相邻数组之间的空缺数,中间如果相邻数字相等,直接返回false。
如果 0 的个数大于等于空缺的总数,那么这个数组就是连续的,反之则不连续。

import java.util.Arrays;
public class Solution {
    public boolean isContinuous(int[] numbers) {
        if (numbers.length < 5) {
            return false;
        }
        Arrays.sort(numbers);
        int countW = 0;//记录王的数量
        int countG = 0;//记录空隙的数量
        for (int i = 0; i < numbers.length - 1; i++) {
            if (numbers[i] == 0) {// 是王
                countW++;
            } else {
                if (numbers[i + 1] - numbers[i] > 1) {// 不连续
                    countG += numbers[i + 1] - numbers[i] - 1;
                } else if (numbers[i + 1] == numbers[i]) {// 出现重复的,且不是王
                    return false;
                }
            }
        }
        if (countW >= countG) {
            return true;
        } else {
            return false;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值