当前位置: 首页 > news >正文

剑指 Offer 61 扑克牌中的顺子

摘要

扑克牌中的顺子

一、集合 Set + 遍历

根据题意,此5张牌是顺子的 充分条件 如下:

  • 除大小王外,所有牌 无重复 ;
  • 设此5张牌中最大的牌为max,最小的牌为min(大小王除外),则需满足:max−min<5。

因而,可将问题转化为:此5张牌是否满足以上两个条件?

算法步骤:

  • 遍历五张牌,遇到大小王(即0)直接跳过。
  • 判别重复:利用 Set 实现遍历判重, Set 的查找方法的时间复杂度为O(1);
  • 获取最大 / 最小的牌: 借助辅助变量 max和min,遍历统计即可。
class Solution {public boolean isStraight(int[] nums) {Set<Integer> repeat = new HashSet<>();int max = 0, min = 14;for(int num : nums) {if(num == 0) continue; // 跳过大小王max = Math.max(max, num); // 最大牌min = Math.min(min, num); // 最小牌if(repeat.contains(num)) return false; // 若有重复,提前返回 falserepeat.add(num); // 添加此牌至 Set}return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子}
}

复杂度分析:

  • 时间复杂度 O(N)=O(5)=O(1) : 其中 N为nums长度,本题中N≡5;遍历数组使用O(N)时间。
  • 空间复杂度 O(N)=O(5)=O(1): 用于判重的辅助 Set 使用 O(N) 额外空间

二、排序 + 遍历

  • 先对数组执行排序。
  • 判别重复: 排序数组中的相同元素位置相邻,因此可通过遍历数组,判断 nums[i]=nums[i+1]是否成立来判重。
  • 获取最大 / 最小的牌: 排序后,数组末位元素nums[4]为最大牌;元素 nums[joker]为最小牌,其中 joker为大小王的数量。
package Hashmap;import java.util.Arrays;/*** @Classname JZ61扑克牌中的顺子* @Description TODO* @Date 2023/3/7 21:43* @Created by xjl*/
public class JZ61扑克牌中的顺子 {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 则可构成顺子}
}

复杂度分析:

  • 时间复杂度 O(Nlog⁡N)=O(5log⁡5)=O(1): 其中 NN 为nums长度,本题中N≡5;数组排序使用 O(Nlog⁡N)时间。

  • 空间复杂度 O(1): 变量 jokerjoker 使用 O(1)大小的额外空间。

博文参考

《leetcode》

相关文章:

剑指 Offer 61 扑克牌中的顺子

摘要 扑克牌中的顺子 一、集合 Set 遍历 根据题意&#xff0c;此5张牌是顺子的 充分条件 如下&#xff1a; 除大小王外&#xff0c;所有牌 无重复 &#xff1b;设此5张牌中最大的牌为max&#xff0c;最小的牌为min&#xff08;大小王除外&#xff09;&#xff0c;则需满足…...

Spring 响应式编程-读书笔记

序言 大家好&#xff0c;我是比特桃。本文为《Spring 响应式编程》的读书笔记&#xff0c;响应式技术栈可以创建极其高效、易于获取且具有回弹性的端点&#xff0c;同时响应式可以容忍网络延迟&#xff0c;并以影响较小的方式处理故障。响应式微服务还可以隔离慢速事务并加速速…...

CI流水线的理解

一、概念 单元测试&#xff1a;针对软件的基本单元&#xff08;如&#xff1a;类、函数&#xff09;所做的测试。 集成测试&#xff1a;将软件代码单元集成起来后&#xff0c;以组件、模块和子系统为单位进行的测试&#xff0c;主要测试接口间的交互关系。也称组件测试&#xf…...

OpenStack手动分布式部署Nova【Queens版】

目录 Nove简介&#xff1a; 1、登录数据库配置&#xff08;在controller执行&#xff09; 1.1登录数据库 1.2数据库里创建nova-api 1.3数据库登录授权 1.4创建nova用户 1.5添加admin用户为nova用户 1.6创建nova服务端点 1.7创建compute API 服务端点 1.8创建一个placement服务…...

centos7 oracle19c安装 ORA-01012: not logged on

总共分三步 1.下载安装包:里面有一份详细的安装教程 链接&#xff1a;https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码&#xff1a;8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…...

山东小巨人申报条件

国家专精特新小巨人特点1、经济效益&#xff1a;上年度企业营业收入在1亿元至4亿元之间&#xff0c;近2年主营业务收入或净利润的平均增长率达到10%以上&#xff0c;企业资产负债率不高于70%。2、专业化程度&#xff1a;&#xff08;1&#xff09;企业从事特定细分市场时间达到…...

手写中实现并学习ahooks——useRequest

前言 最近业务没有之前紧张了&#xff0c;也是消失了一段时间&#xff0c;也总结了一些之前业务上的问题。 和同事沟通也是发现普通的async await 封装api在复杂业务场景下针对于请求的业务逻辑比较多&#xff0c;也是推荐我去学习一波ahooks&#xff0c;由于问题起源于请求…...

[手写OS]动手实现一个OS 之 准备工作以及引导扇区

[手写OS]动手实现一个OS之第一步-环境以及引导扇区 环境准备 一台可用计算机&#xff08;linux我不知道&#xff0c;我用的Windows&#xff09;汇编编译器NASM一个方便的软盘读写工具VirtualBox 汇编编译器NASM 官网地址&#xff1a;https://www.nasm.us/pub/nasm/snapshot…...

JVM实战OutOfMemoryError异常

目录 Java堆溢出 常见原因&#xff1a; 虚拟机栈和本地方法栈溢出 实验1&#xff1a;虚拟机栈和本地方法栈测试&#xff08;作为第1点测试程序&#xff09; 实验2&#xff1a;&#xff08;作为第1点测试程序&#xff09; 运行时常量池和方法区溢出 运行时常量池内存溢出 …...

C++虚函数操作指南

1 什么是虚函数&#xff1f;1.1 虚函数的使用规则1.2 用 C 运行虚函数的示例1.3 协变式返回类型2 在 C 中使用虚函数的优点2.1 代码更为灵活、更为通用2.2 代码可复用2.3 契约式设计3 虚函数的局限性3.1 性能3.2 设计问题3.3 调试&#xff0c;容易出错4 虚函数的替代方案4.1 仅…...

Mybatis-Plus分页插件

引言&#xff1a;MyBatis Plus自带分页插件&#xff0c;只要简单的配置即可实现分页功能 1.添加Configuration配置类 Configuration MapperScan("com.atguigu.mybatisplus.mapper") //可以将主类中的注解移到此处public class MybatisPlusConfig {Beanpublic Mybatis…...

Selenium Webdriver options的实用参数设置

1、关闭Chrome浏览器受自动控制的提示 options.add_experimental_option(useAutomationExtension, False) options.add_experimental_option(excludeSwitches, [enable-automation])2、关闭是否保存密码的弹窗 options.add_experimental_option("prefs", { "c…...

代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、 15. 三数之和 、18. 四数之和

454.四数相加II 454.四数相加II介绍给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a;思路因为是存放在数组里不同位置的元素&#xff0c;因此不需要考虑去重的操作&#xff0c;而…...

详解抓包原理以及抓包工具whistle的用法

什么是抓包? 分析网络问题业务分析分析网络信息流通量网络大数据金融风险控制探测企图入侵网络的攻击探测由内部和外部的用户滥用网络资源探测网络入侵后的影响监测链接互联网宽频流量监测网络使用流量(包括内部用户&#xff0c;外部用户和系统)监测互联网和用户电脑的安全状…...

【C++】反向迭代器

文章目录一、什么是反向迭代器二、STL 源码中反向迭代器的实现三、reverse_iterator 的模拟实现四、vector 和 list 反向迭代器的实现一、什么是反向迭代器 C 中一共有四种迭代器 – iterator、const_iterator、reverse_iterator 以及 const_reverse_iterator&#xff0c;其中…...

(蓝桥真题)扫描游戏(计算几何+线段树二分)

题目链接&#xff1a;P8777 [蓝桥杯 2022 省 A] 扫描游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入&#xff1a; 5 2 0 1 1 0 3 2 4 3 5 6 8 1 -51 -33 2 样例输出&#xff1a; 1 1 3 4 -1 分析&#xff1a;先考虑如何对物件进行排序&#xff0c;首先&…...

面试官:什么是双亲委派模型?如何打破它?

本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。) 参加过校招面试的同学,应该对这个问题不陌生。一般提问 JVM 知识点的时候,就会顺带问你双亲委派模型(别扭的翻译。。。)。 就算是不准备面试,学习双亲委派模型对于我…...

自建服务器系列- DDNS配置

1、环境说明 光猫桥接路由器拔号的模式 2、DDNS是什么 对于DHCP方式获得的IP&#xff0c;无论对于局域网内来说&#xff0c;还是外网来说&#xff0c;都会有使得IP地址每隔一段时间变化一次&#xff0c;如果想要通过恒定不变的地址访问主机&#xff0c;就需要动态域名解析。…...

vue中使用axios简单封装用法,axios报错the request was rejected because no multipart boundar

在这里插入代码片## 创建实例 //这个写法作为我错误的记录&#xff0c;可以不看暂时 transformRequest: [(data: any) > {if (!data) {data {}}return qs.stringify(data)}]在我的项目里面&#xff0c;初始化配置里面进行handers的修改&#xff0c;例如&#xff1a;例如将…...

Leetcode.1220 统计元音字母序列的数目

题目链接 Leetcode.1220 统计元音字母序列的数目 Rating &#xff1a; 1730 题目描述 给你一个整数 n&#xff0c;请你帮忙统计一下我们可以按下述规则形成多少个长度为 n的字符串&#xff1a; 字符串中的每个字符都应当是小写元音字母&#xff08;a, e, i, o, u&#xff09;…...

探索Tabler Icons 3.40.0:新增6000+高质量SVG图标的终极指南

探索Tabler Icons 3.40.0&#xff1a;新增6000高质量SVG图标的终极指南 【免费下载链接】tabler-icons A set of over 4800 free MIT-licensed high-quality SVG icons for you to use in your web projects. 项目地址: https://gitcode.com/GitHub_Trending/ta/tabler-icons…...

基于springboot美食分享平台设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

B端拓客号码核验:困局审视、技术革新与行业前行,氪迹科技法人股东号码核验系统,阶梯式价格

在B端拓客的全流程中&#xff0c;有效触达企业核心决策层是实现合作转化的关键&#xff0c;而法人、股东、董监高等群体的联系方式&#xff0c;則是搭建这一沟通链路的核心基础。号码核验作为拓客工作的前置核心环节&#xff0c;其筛选质量与效率&#xff0c;直接决定着拓客投入…...

告别重复劳动:用快马生成自动化脚本,实现dify多环境一键部署与高效管理

在团队协作中&#xff0c;dify的部署工作常常成为效率瓶颈。每次新版本发布或环境迁移时&#xff0c;手动配置docker-compose文件、处理版本差异、备份数据等重复操作不仅耗时&#xff0c;还容易出错。最近尝试用InsCode(快马)平台生成自动化脚本集&#xff0c;意外发现部署效率…...

知识向量化实战指南:从模型选型到混合检索优化

1. 知识向量化的核心价值与应用场景 第一次接触知识向量化这个概念时&#xff0c;我也是一头雾水。直到在医疗知识库项目中亲眼看到"糖尿病治疗"和"血糖控制方案"这两个看似不同的查询&#xff0c;通过向量化后获得了0.92的相似度评分&#xff0c;才真正理…...

Halcon一维码识别避坑指南:从模糊图像到精准解码

Halcon一维码识别实战&#xff1a;攻克模糊图像与复杂场景的五大策略 在物流分拣线上&#xff0c;传送带以每秒2米的速度运行&#xff0c;扫码枪却频繁报错——这不是设备故障&#xff0c;而是Halcon参数配置与图像预处理策略的缺失。当条形码出现在褶皱包装、反光表面或运动模…...

告别Widgets?用QtQuick和QML为你的桌面应用注入现代感(附完整Demo)

从Qt Widgets到QtQuick&#xff1a;打造现代桌面应用的实战指南 在桌面应用开发领域&#xff0c;Qt框架一直以其跨平台能力和稳定性著称。然而&#xff0c;随着用户对界面体验要求的提升&#xff0c;传统的Widgets方式逐渐显露出局限性——动画生硬、响应迟钝、与现代操作系统风…...

教你 .NET Core API 怎么和数据库表一一对应

不用复杂理论,直接照做就能成功! 一、核心规则(记住这 4 句) 类 = 表 类名 = 表名 属性 = 字段 属性名 = 字段名 二、一步一步教你对应(超级简单) 1)数据库有一张表 → 你就写一个类 例如你数据库里有表: sql Users (Id int primary key identity,Name nvarchar(5…...

iPhone 抓包失败 4 种具体情况逐个解决方法

抓不到包这个描述太模糊了&#xff0c;在实际调试中&#xff0c;这句话至少对应四种完全不同的情况&#xff1a; 完全没有请求只有浏览器能抓到能抓到但 HTTPS 解不开能抓到但数据不完整 如果不先分清楚是哪一种&#xff0c;就会一直重复安装证书或改代理配置。一、先做一个验证…...

如何将TaskWeaver与LangChain无缝集成:扩展AI代理能力边界的终极指南

如何将TaskWeaver与LangChain无缝集成&#xff1a;扩展AI代理能力边界的终极指南 【免费下载链接】TaskWeaver A code-first agent framework for seamlessly planning and executing data analytics tasks. 项目地址: https://gitcode.com/gh_mirrors/ta/TaskWeaver T…...