剑指Offer61.扑克牌中的顺子 C++

1、题目描述

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

2、VS2019上运行

排序的方法

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;class Solution {
public:/*** 判断给定的扑克牌数组是否是一个顺子* @param nums 给定的扑克牌数组* @return 如果是顺子,返回true;否则,返回false*/bool isStraight(vector<int>& nums) {sort(nums.begin(), nums.end());  // 对扑克牌数组进行排序int zero = 0;  // 记录0的数量(大小王的数量)for (int i = 0; i < 4; i++) {if (nums[i] == 0) {zero++;  // 统计0的数量continue;}if (nums[i] == nums[i + 1]) {return false;  // 存在对子,不是顺子,返回false}zero -= nums[i + 1] - nums[i] - 1;  // 计算间隔并减去大小王的数量}return zero >= 0;  // 如果剩余的大小王数量可以填补所有间隔,返回true;否则,返回false}
};int main() {vector<int> nums = { 1, 2, 3, 4, 5 };Solution solution;bool result = solution.isStraight(nums);cout << (result ? "true" : "false") << endl;return 0;
}

运行结果:
true

3、解题思路

  • 1.首先对给定的扑克牌数组进行排序,使其按照牌面大小升序排列。
  • 2.统计大小王的数量,即统计数组中0的个数。
  • 3.遍历排序后的数组,从第一个非0的数字开始(nums[i] != 0),判断后续数字是否连续。具体步骤如下:
    ~如果遇到相同的数字,说明存在对子,不满足顺子的要求,直接返回false。
    ~计算相邻数字之间的间隔(排除了0),如果间隔大于1,则需要使用大小王来填补空缺。将大小王的数量减去该间隔值减1。如果大小王数量不足以填补空缺,说明不是顺子,返回false。
  • 4.如果遍历完所有数字都满足连续关系,且大小王的剩余数量足够填补空缺,则返回true。

4、题目理解

  • 从一副扑克牌中随机抽取5张牌,要判断这5张牌是否是一个顺子,即这些牌是否是连续的。
  • 给定的扑克牌规则如下:
    1.数字2~10对应牌面上的数字本身。
    2.A表示1。
    3.J表示11。
    4.Q表示12。
    5.K表示13。
    6.大、小王可看作任意数字,大、小王分别用0表示。
  • 要判断这5张牌是否是一个顺子,可以按照以下步骤:
  • 1.对这5张牌进行排序,确保它们按照牌面的大小排列。
    2.统计大、小王(即0)的数量。
    3.在排序后的牌中,找到第一个非0的数字,记作x。
    4.从x+1开始,判断后面的数字是否依次递增,即是否连续。如果存在非连续的数字(除了0之外),则不是顺子。
    5.最后,考虑大、小王的数量。如果大、小王的数量多于等于缺失的数字数量(非0的间隔数量),则可以使用大、小王来填补间隔,使得牌依旧连续。否则,无法凑成一个顺子。

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

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

相关文章

并发服务器模型,多线程并发

一、多线程并发完整代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> #include <…

突然让做性能测试?试试RunnerGo

当前&#xff0c;性能测试已经是一名软件测试工程师必须要了解&#xff0c;甚至熟练使用的一项技能了&#xff0c;在工作时可能每次发版都要跑一遍性能&#xff0c;跑一遍自动化。性能测试入门容易&#xff0c;深入则需要太多的知识量&#xff0c;今天这篇文章给大家带来&#…

Rocky Linux更换为国内源

Rocky Linux提供的可供切换的源列表&#xff1a;Mirrors - Mirror Manager 其中以 COUNTRY 列为 CN 的是国内源。 选择其中一个Rocky Linux 源使用帮助 — USTC Mirror Help 文档 操作前请做好备份 对于 Rocky Linux 8&#xff0c;使用以下命令替换默认的配置 sed -e s|^mirr…

新能源汽车电控系统

新能源汽车电控系统主要分为&#xff1a;三电系统电控系统、高压系统电控系统、低压系统电控系统 三电系统电控系统 包括整车控制器、电池管理系统、驱动电机控制器等。 整车控制器VCU 整车控制器作为电动汽车中央控制单元&#xff0c;是整个控制系统的核心&#xff0c;也是…

zabbix监控mysql数据库、nginx、Tomcat

zabbix监控mysql数据库、nginx、Tomcat 一.zabbix监控mysql数据库 1.环境规划 hostIP部署zabbix-server192.168.198.17zabbix服务器搭建zabbix-mysql192.168.198.15zabbix客户端搭建 2.zabbix-server安装部署&#xff08;192.168.198.17&#xff09; 请参考以下配置&#…

Azure概念介绍

云计算定义 云计算是一种使用网络进行存储和处理数据的计算方式。它通过将数据和应用程序存储在云端服务器上&#xff0c;使用户能够通过互联网访问和使用这些资源&#xff0c;而无需依赖于本地硬件和软件。 发展历史 云计算的概念最早可以追溯到20世纪60年代的时候&#x…

mysql 分库分表浅析

分表是分散数据库压力的好方法。 分表&#xff0c;最直白的意思&#xff0c;就是将一个表结构分为多个表&#xff0c;然后&#xff0c;可以再同一个库里&#xff0c;也可以放到不同的库。 当然&#xff0c;首先要知道什么情况下&#xff0c;才需要分表。个人觉得单表记录条数达…

2023河南萌新联赛第(五)场:郑州轻工业大学C-数位dp

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 给定一个正整数 n&#xff0c;你可以对 n 进行任意次&#xff08;包括零次&#xff09;如下操作&#xff1a; 选择 n 上的某一数位&#xff0c;将其删去&#xff0c;剩下的左右部分合并。例如 123&#xff0c;你可以选择…

年至年的选择仿elementui的样式

组件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 时间选择年 - 年 --> <template><div class"yearPicker"…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能&#xff08;WAI-ARIA、第 508 节/WCAG 合规性&#xff09;、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

九、多态(2)

本章概要 构造器和多态 构造器调用顺序继承和清理构造器内部多态方法的行为 协变返回类型使用继承设计 替代 vs 扩展向下转型与运行时类型信息 构造器和多态 通常&#xff0c;构造器不同于其他类型的方法。在涉及多态时也是如此。尽管构造器不具有多态性&#xff08;事实上…

【JavaScript】new 的原理以及实现

网道 - new 命令的原理 使用new命令时&#xff0c;它后面的函数依次执行下面的步骤。 创建一个空对象&#xff0c;作为将要返回的对象实例。将这个空对象的原型&#xff0c;指向构造函数的prototype属性。将这个空对象赋值给函数内部的this关键字。如果构造函数返回了一个对象…

版本动态 | SolidUI 0.2.0 版本发布

SolidUI 一句话生成任何图形 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&…

[SpringCloud] 组件性能优化技巧

Feign 配置优化hystrix配置 优化ribbon 优化Servlet 容器 优化Zuul配置 优化 文章目录 1.Servlet 容器 优化2.Feign 配置优化3.Zuul配置 优化4.hystrix配置 优化5.ribbon 优化 1.Servlet 容器 优化 默认情况下, Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器, 可以将 We…

在Visual Studio上,使用OpenCV实现人脸识别

1. 环境与说明 本文介绍了如何在Visual Studio上&#xff0c;使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示&#xff0…

Linux命令200例:adduser用于创建新用户

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

代理模式【Proxy Pattern】

什么是代理模式呢&#xff1f;我很忙&#xff0c;忙的没空理你&#xff0c;那你要找我呢就先找我的代理人吧&#xff0c;那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧&#xff0c;那就是两个人具备同一个接口&#xff0c;代理人虽然不能干活&#xff0c;但是被 代…

解决 Mac 上使用 Electron Updater 更新 App 不成功的问题!!!

文章目录 1. 现象2. 分析并如何解决3. 后续 1. 现象 在Mac电脑上&#xff0c;使用Electron Updater对程序进行更新&#xff0c;但是一直不成功&#xff0c;也不报错。具体表现是这样的&#xff1a;当前我的程序版本是3.11版本&#xff0c;点击更新之后&#xff0c;也下载了&am…

11 迭代器|生成器|协程

文章目录 迭代器可迭代对象可迭代对象的本质iter()函数与 next()函数迭代器 Iterator样例 for...in...循环的本质使用的场景--斐波那契数列list和tuple也可以接收可迭代对象 生成器简介创建生成器方法一方法二总结 使用 send 唤醒 协程协程和线程差异简单实现协程greenletgeven…

微PE工具箱实现U盘重装Windows系统

教程来源 U盘重装Windows系统&#xff08;微PE工具箱&#xff09;_哔哩哔哩_bilibili 加上自己的一丢丢理解&#xff0c;如果你觉得长视频看了犯困&#xff0c;不如看看我的理解文章说不定能够帮助到你 准备工作 到这个网站使用迅雷下载免费无插件的官方镜像MSDN, 我告诉你…