【LeetCode】剑指 Offer 61. 扑克牌中的顺子 p298 -- Java Version

news2025/1/19 3:08:28

题目链接:https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/

1. 题目介绍(61. 扑克牌中的顺子)

从若干副扑克牌中随机抽 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] .

2. 题解

2.1 排序 + 遍历 – O(nlogn)

时间复杂度O(nlogn),空间复杂度O(1)
在这里插入图片描述

解题思路】:
阅读该题示例,我们就能很容易的发现该题和真实世界中的扑克牌顺子还是有所区别的,区别在于:A 与 2 是作为数字 1 与 2 来和 3、4、5组成顺子,而不是真实世界中与 J、Q、K组成顺子,且 大小王可以作为万能牌 来代替其它任意数字,也正是因为这点区别,反而降低了题目的难度。
……
明白了以上思路,我们只需要做 3 件事情即可解题:

  1. 首先把数组排序(即 单调递增);
  2. 其次统计数组中 0 的个数(即 万能牌的个数);
  3. 最后统计排序之后的数组中相邻数字之间的空缺总数,如果空缺的总数小于或等于 0 的个数,说明数组连续,否则数组则不连续。

……
实现策略】:
根据以上分析,我们很容易就能得到编程思路:

  1. 首先进行无效输入判断;
  2. 使用库函数 sort() 对数组进行排序,该排序的时间复杂度为 O(nlogn);
  3. 遍历数组,统计数组中 0 的个数;
  4. 统计数组中达成顺子空缺的间隔数
  5. 对比空缺数与0的个数,如果空缺>0的个数,说明不是顺子。
class Solution {
    // Solution 1.1:排序 + 遍历
    // 1. 对数组进行排序
    // 2. 统计数组中0的个数
    // 3. 统计数组中达成顺子空缺的间隔数
    public boolean isStraight(int[] nums) {
        // 无效输入判断
        if (nums.length <= 0) return false;
        // 对数组进行排序
        Arrays.sort(nums);

        int arraysZeroNum = 0;
        int arraysGapNum = 0;

        // 遍历数组,统计数组中0的个数
        for (int i = 0; i < nums.length; i++) {
            // 因为数组已经经过排序,所以遇到不为0的数时,可以直接结束循环
            if (nums[i] != 0) break;
            arraysZeroNum++;
        }

        // 统计数组中达成顺子空缺的间隔数
        int small = arraysZeroNum;  // 第一个不为0的元素的下标
        int big = small + 1;
        while (big < nums.length) {
            // 出现重复数字,一定不是顺子
            if (nums[small] == nums[big]) return false;

            // 排序是单调递增,因此后面的数都比前面的要大
            arraysGapNum += nums[big] - nums[small] - 1;
            small = big;
            big++;
        }

        // 对比空缺数与0的个数,如果空缺>0的个数,说明不是顺子
        return (arraysGapNum > arraysZeroNum) ? false : true;
    }
}

在这里插入图片描述

代码简化:】:
Solution 1.2 为对 Solution 1.1的代码简化,具体简化如下:

  1. 将判重与统计万能牌的遍历合并在了一起;
  2. 省略了 Solution 1.1 中对数组中顺子空缺数的统计,转而使用 最大牌 - 最小牌 < 5 这一条件表达式代替,极大的简化了代码。
class Solution {
    // Solution 1.2:排序 + 遍历 简化版
    // 简化:将逐一计算数字中数字的空缺数改为直接用 最大牌 - 最小牌 < 5 的方式
    public boolean isStraight(int[] nums) {
        int joker = 0;
        Arrays.sort(nums); // 数组排序
        for(int i = 0; i < 4; i++) {
            if(nums[i] == 0) joker++; // 统计大小王数量
            else if(nums[i] == nums[i + 1]) return false; // 若有重复,提前返回 false
        }
        return nums[4] - nums[joker] < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
    }
}

在这里插入图片描述

3. 参考资料

[1] 面试题61. 扑克牌中的顺子(集合 Set / 排序,清晰图解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来&#xff0c;然后随机抽取几个幸运用户给予实物/虚拟的奖品&#xff1b;此时&#xff0c;开发人员就需要写上一个抽奖的算法&#xff0c;来实现幸运用户的抽取&#xff1b;其实我们完全可以利用Redis的集合&#xff08;Set&#xff09;&#xff0c;就能轻…

汽车CAN、LIN汇总

目录&#xff1a; 一、准备知识 1、什么是CAN 2、汽车网络发展时间轴 3、如何通信 4、CAN总线结构 1&#xff09;ISO 11898 2&#xff09;CAN 和 J1850的比较 3&#xff09;CAN 和 UART的比较 5、关于节点 1&#xff09;什么是节点 2&#xff09;节点&#xff1a;报文传…

Jdbc开发结构

一、导入jar包&#xff0c;放置lib目录下&#xff0c;需要的有&#xff1a; &#xff08;1&#xff09;alibaba连接池&#xff08;druid&#xff09; &#xff08;2&#xff09;apache工具类&#xff08;commons-dbutils&…

网络协议-HTTP入门和基础工具链

Http协议介绍 发明者&#xff1a;蒂姆伯纳斯-李 英国计算机科学家&#xff08;1955-&#xff09; 万维网&#xff08;1990HTTP协议&#xff09; 世界第一个浏览器 第一个服务端程序 创办MIT人工智能实验室 HTTP协议 超文本传输协议&#xff08;Hyper Text Trabsfer Prot…

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周&#xff0c;无数的同事和客户都在向我提出一个询问&#xff1a;ChatGPT 可以帮到我们什么&#xff1f; 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后&#xff0c;这几天我…

信号系统中使用的继电器

继电器是什么 继电器是一种电气开关&#xff0c;它使用电磁力来控制一个或多个电气电路的操作。继电器通常由电磁铁、触点和弹簧等部件组成。当电磁铁被激活时&#xff0c;它会产生磁场&#xff0c;吸引或释放触点&#xff0c;从而打开或关闭电路。 继电器的分类 继电器分为…

CSS学习(5) - 布局

文章首发于我的个人博客&#xff1a;欢迎大佬们前来逛逛 文章目录 CSS布局display属性width和max-widthposition 属性溢出浮动和清除floatclear 布局案例 CSS布局 display属性 display 属性是CSS布局的最重要的属性。 display属性规定是否/如何显示元素。 display元素通常与…

Python词云

词云图wordcloud 1.安装第三方库 j i e b a 库、 m a t p l o t l i b 、 w o r d c l o u d 库 jieba库、matplotlib、wordcloud库 jieba库、matplotlib、wordcloud库 2.过程 1.使用 j i e b a jieba jieba 库对数据进行分词整理&#xff0c;转为 t x t txt txt文件&#…

AI和ML:数据中心的新前沿创新和优化

数据中心现在正在将人工智能(AI)和机器学习(ML)技术集成到其基础架构中&#xff0c;以保持竞争力。通过在传统数据中心架构中实施人工智能驱动层&#xff0c;企业可以创建自主数据中心&#xff0c;无需人工干预即可优化和执行通用数据工程任务。 随着对数据处理和存储的需求持续…

【行为型模式】策略模式

文章目录 1、简介2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现 4、对比模板方法模式5、策略模式优缺点6、应用场景 1、简介 策略模式(Strategy)是一种设计模式&#xff0c;它允许在运行时根据需要选择算法的行为。这个模式将每个算法封装到一个类中&#xff0c…

Oracle VM VirtualBox安装开放麒麟桌面版本操作

1.环境 Oracle VM VirtualBox版本6.1.18 开放麒麟桌面版本openkylin 0.0.5 https://mirror.lzu.edu.cn/openkylin-cdimage/yangtze/openkylin-0.9.5-x86_64.iso 1.创建新虚拟电脑 ql 并将ios导入 然后点击启动 注意&#xff1a; vm box如果鼠标设置不当的话 基本上不可能完成…

PEIS源码 体检源码 医院体检系统源码

PEIS体检管理系统源码 PEIS源码 体检源码 医院体检系统源码 本套PEIS医院体检管理系统源码&#xff0c;采用C#语言开发&#xff0c;C/S架构&#xff0c;前台开发工具为Vs2012&#xff0c;后台数据库采用oracle大型数据库。有演示。 文末获取联系 PEIS体检管理系统适用于大中型…

鹅厂狂招工程师,国产自研芯片“沧海”斩获8项世界第一

前言 4月17日&#xff0c;腾讯云官方披露&#xff0c;在由莫斯科国立大学举办的最新一届MSU硬件视频编码比赛中&#xff0c;腾讯自研的编解码芯片“沧海”&#xff0c;经过数月的严格测试&#xff0c;获得了所参加的两个赛道8项评分的全部第一。 MSU为视频压缩领域最具影响力…

TensorFlow-GPU【易安装】(全网最全、通俗易懂、小白友好)

写在前面&#xff1a;CSDN的小伙伴们&#xff0c;很长时间没有发文了&#xff0c;自从靠运气侥幸考上研究生&#xff0c;就一直在苦苦寻找自己的研究方向。在跟风“随大流”之后&#xff0c;选择了深度学习这一领域&#xff0c;也是一场噩梦的开始&#xff01; 为了更好的学习吴…

MySQL数据恢复-亲测有效版

MySQL数据恢复-亲测有效版 1.日志恢复的前提&#xff1a;1.1.登录远程MySQL服务器&#xff1a;1.2.查看binlog是否开启&#xff1a; 2.查看binlog存放日志文件目录&#xff1a;3.找到mysqlbinlog命令4.设置mysqlbinlog命令为全局可见5.使用mysqlbinlog解析binlog日志6.数据恢复…

信号频谱分析举例

以IQ解调不加滤波器的信号频谱进行分析 系统结构 IQ解调不加滤波器的系统结构框图为&#xff1a; 最后输出的基带复信号时域表达式为&#xff1a; s b b ( t ) s i ( t ) j s q ( t ) s ( t ) c o s ( ω c t ϕ ) − j s ( t ) s i n ( ω c t ϕ ) s_{bb}(t) s_i(t…

UDP报文结构解析

文章目录 UDP报文结构的讲解以及注意事项源端口和目的端口报文长度校验和 UDP报文结构的讲解以及注意事项 想要学习一个协议&#xff0c;我们就需要认识一下这个协议的报文格式&#xff0c;认识这个协议具体是如何组织数据的&#xff1a; 我们常见的UDP报文的格式图都是这样画…

体验编写Vue框架项目实例的详细步骤(包括git仓库使用)

一、查看项目设计图 二、确定项目开发技术栈 vue-cli3 element-ui axios vuex 三、页面布局 四、查看接口文档 五、开始开发 &#xff08;五&#xff09;.搭建项目结构 1.创建项目 vue create godlike 创建项目的文章在&#xff1a;Vue自主搭建项目&#xff1a;Man…

Unity插件XCharts 图表

参考网址&#xff1a;Unity插件XCharts_xcharts unity_Raki_0的博客-CSDN博客 XCharts 下载地址 &#xff1a;Unity插件XCharts资源-CSDN文库 github 地址&#xff1a;Releases XCharts-Team/XCharts GitHub 一.导入教程 1.直接放入XCharts源码到项目 下载好XCharts源码…

Linux -- Web服务器 快速搭建静态网站,替换默认网页目录

快速搭建静态网站 &#xff1a; 先简单写个 页面 [rootserver ~]# echo " This is my first simple-Web " > /var/www/html/index.html 我们给网页写了一行内容 作为 静态网页的内容 &#xff08; 当然了&#xff0c;写的相当简单&#xff0c;您先理解着看&a…