每日一练(33):扑克牌中的顺子

简介: 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。


示例 1:


输入: [1,2,3,4,5]

输出: True


示例 2:


输入: [0,0,1,2,5]

输出: True


限制:


数组长度为 5

数组的数取值为 [0, 13] .


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:不排序方式


算法流程:


1、5 张扑克牌中的最大值 maxValue 和最小值 minValue ,那我们就知道,要使它为顺子需要 maxValue - minValue + 1 张牌。


在查找 maxValue 和 minValue 过程中,跳过大小王 0 。


如果 maxValue - minValue + 1 > 5,说明题目给的 5 张牌不足以构成顺子,返回 false .

  • 即使里面有大小王,也不够用来填补使它构成顺子。


如果 maxValue - minValue + 1 <= 5,说明 5 张牌足以构成顺子,返回 true。


  • 里面的大小王填补在合适位置即可。


2、同时,我们再定义一个标志数组判断是否有重复数字,发现重复数字直接返回 false 即可。


bool isStraight(vector<int>& nums) {
    bool m[15];
    memset(m, 0, sizeof(m));
    int minValue = 14, maxValue = 0;
    for (int item : nums) {
        if (item == 0) {
            continue;
        }
        if (m[item]) {
            return false;
        }
        m[item] = true;
        minValue = min(minValue, item);        
        maxValue = max(maxValue, item);
    }
    return (maxValue - minValue + 1 <= 5);
}


方法二:排序方式


算法流程:


排序之后扑克牌就有序了,我们就可以直接判断相邻两张牌之间需要多少个大王或小王来填补。


  • 如果需要填补大小王的数量,大于已有大小王的数量,则返回 false


  • 相反,如果需要填补大小王的数量,小于或等于已有大小王的数量,则返回 true


bool isStraight(vector<int>& nums) {
    sort(nums.begin(), nums.end());    //排序
    int zero = 0;
    for (int i = 0; i < 4; i++) {
        if (nums[i] == 0) {    //计数大小王
            zero++;
            continue;
        }
        if (nums[i] == nums[i+1]) {//有重复
            return false;
        }
        zero -= nums[i+1] - nums[i] - 1;//需要填补大小王的数量
    }
    return zero >= 0;
}


目录
相关文章
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
224 0
|
机器学习/深度学习 人工智能 自然语言处理
springboot基于人工智能和自然语言理解技术的医院智能导医系统源码
智能导诊系统可为患者提供线上挂号智能辅助服务,患者根据提示手动输入自己的基本症状,通过智能对话方式,该系统会依据大数据一步步帮助患者“诊断”,并最终推荐就医的科室和相关专家。患者可自主选择,实现“一键挂号”。这一模式将精确的导诊服务前置,从源头上让医疗服务更高效。
626 2
|
JSON 缓存 运维
Dataphin数据服务API开启IP白名单调用鉴权
Dataphin数据服务API提供便捷的API开发及运维、应用调用权限管理等功能,为数据业务化提供了坚实的支撑。在应用调用API的时候,Dataphin可支持通过AcessKey方式的调用鉴权。而在企业内部网络中,也可以使用IP白名单方式简化调用。本文将为您介绍如何开启IP白名单的调用鉴权。
434 0
|
存储 关系型数据库 MySQL
Red Hat 安装MySQL 8.0与 Navicat
Red Hat 安装 MySQL 8.0 1、更新软件包列表 在添加 MySQL 存储库后,运行以下命令以更新软件包列表: sudo yum update 2、安装MySQL服务器和客户端 执行以下命令安装MySQL 8.0服务器和客户端软件包: sudo yum install -y mysql-server 3、启动MySQL服务 安装完成后,MySQL 服务器应该已经自动启动。如果没有启动,您可以运行以下命令手动启动服务: sudo systemctl start mysqld 启用 MySQL 服务的开机启动,可以运行以下命令: sudo systemctl enable mysqld
524 1
|
自然语言处理 并行计算 PyTorch
GitHub 开源神器 Bark模型,让文本转语音更简单!
GitHub 开源神器 Bark模型,让文本转语音更简单!
498 0
|
存储 搜索推荐 算法
快速排序算法详解
快速排序算法详解
|
监控 小程序 安全
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)
小程序提供便捷的鲜花选购和配送服务,汇聚全球优质鲜花品种,确保新鲜送达。用户可轻松挑选花束,享受个性化配送,并通过地图功能查看配送位置。此外,物流功能实时更新,保证鲜花安全快速到达。代码示例展示了地图和物流信息的页面布局与交互实现。 ### 配送与物流功能亮点 1. **地图功能**:使用`map.wxml`, `map.wxss`, 和 `map.js` 实现定位与导航,确保精准配送。 2. **物流追踪**:通过`logistics.wxml`, `logistics.wxss`, 和 `logistics.js` 显示详细物流状态,提供流畅的用户体验。
300 1
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)
|
机器学习/深度学习 人工智能 人机交互
ICML 2024:AI也会刷抖音!清华领衔发布短视频全模态理解新模型
【8月更文挑战第20天】SALMONN是由清华大学在ICML 2024发表的一种开创性的多模态模型,专为短视频全模态理解设计。它集成了预训练文本大模型与语音、音频编码器,能直接处理多样音频输入,在自动语音识别、翻译、情绪识别等任务中表现出色。SALMONN展现了令人兴奋的新能力,如翻译未训练语言和基于语音的问答。通过少样本激活微调,可进一步发掘其跨模态潜能。尽管如此,模型的计算成本和泛化能力仍是待克服的挑战。SALMONN标志着AI在具备通用听觉理解方面迈出重要一步。[论文链接: https://arxiv.org/abs/2310.13289]
379 3
|
机器学习/深度学习 人工智能 运维
智能化运维:AI在故障预测中的应用
【6月更文挑战第8天】随着人工智能技术的飞速发展,其在IT运维领域的应用也日益广泛。本文将探讨AI技术如何助力运维团队实现故障的智能预测,提高系统稳定性和业务连续性。
|
计算机视觉 Python Windows
OpenCV自动裁剪图片
OpenCV自动裁剪图片
228 1