劍指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.pswp.cn/news/36969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36969.shtml
英文地址,請注明出處:http://en.pswp.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, 我告訴你…