1 题目描述

  LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

2 思路和方法

  (1)首先应该对数组进行排序。

  (2)统计数组中大小王(0)出现的个数。while(numbers[index]==0) ++index; // 统计0的个数

  (3)统计数组中所有相邻数之间的间隔。

  (4)同时还需要排除对子的情况,如果出现了对子,那么肯定不可能是顺子(0除外)。

  (5)最后比较0的个数和间隔大小,如果0的个数大于等于间隔数,说明可以组成顺子。

3 C++核心代码

 class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
if (numbers.size() != )return false; sort(numbers.begin(), numbers.end());
int numOfZero = ;
//统计0的个数
for (int i = ; i != ; i++) {
if (!numbers[i])
numOfZero++;
} int beg = numOfZero+;
int numOfGap = ;
while (beg < ) {
//如果出现了对子,那么肯定不可能是连子
if (numbers[beg - ] == numbers[beg])
return false; numOfGap += numbers[beg] - numbers[beg - ] -;
beg++;
} return (numOfZero >= numOfGap) ? true : false;
}
};

4 C++完整代码

 #include <iostream>
#include <vector>
#include <algorithm> using namespace std; int main() {
vector<int> data{ ,,,, }; if (IsContinuous(data)) {
cout << "is continuous."<< endl;
}
else {
cout << "You don't get lucky." << endl;
} system("pause");
return ;
} bool IsContinuous(vector<int> numbers) {
if (numbers.size() != )return false; sort(numbers.begin(), numbers.end());
int numOfZero = ;
//统计0的个数
for (int i = ; i != ; i++) {
if (!numbers[i])
numOfZero++;
} int beg = numOfZero+;
int numOfGap = ;
while (beg < ) {
//如果出现了对子,那么肯定不可能是连子
if (numbers[beg - ] == numbers[beg])
return false; numOfGap += numbers[beg] - numbers[beg - ] -;
beg++;
} return (numOfZero >= numOfGap) ? true : false;
}

参考资料

https://blog.csdn.net/m0_37950361/article/details/82153790

剑指offer45:扑克牌顺子的更多相关文章

  1. 剑指Offer-45.扑克牌顺子(C++/Java)

    题目: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定 ...

  2. 剑指Offer——扑克牌顺子

    题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...

  3. 剑指offer--41.扑克牌顺子

    没有判断数组长度,导致{1,3,2,5,4}输出结果是false是什么鬼??? ------------------------------------------------------------ ...

  4. 剑指Offer44 扑克牌的顺子

    /************************************************************************* > File Name: 44_Contin ...

  5. 剑指offer——扑克牌的顺子

    思想: 1.先将输入的几个数进行排序,sort函数是#include<algorithm>下的. 2.统计0的个数,以及相邻数的差值,比较0的个数及差值的和.看是否可以用大王填充中间的差值 ...

  6. 剑指Offer45 约瑟夫环

    /************************************************************************* > File Name: 45_LastNu ...

  7. 剑指offer--45.二叉树的深度

    时间限制:1秒 空间限制:32768K 热度指数:139716 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. -- ...

  8. 剑指offer44 扑克牌顺序

    注意一个边界条件:必须是连续的,如果前后两个数是一样的也不满足条件 class Solution { public: bool IsContinuous( vector<int> numb ...

  9. 【剑指offer】扑克牌的顺子

    个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ."红心A,黑桃3,小王,大王,方片 ...

随机推荐

  1. 《视觉SLAM十四讲》学习日志(一)——预备知识

    SLAM简介 : SLAM是 Simultaneous Localization and Mapping 的缩写,中文译作 " 同时定位与地图构建 ".它是指搭载特定传感器的主题, ...

  2. 第一次Java测试及感触(2018.9.20)

    在本周周四进行了java测试,有一点感触,测试的题目是用Java实现一个ATM机的管理系统.之前老师提前给我们样卷,结果考试的时候换了题型,瞬间脑子空白,一时不知道怎么下手,因为暑假虽然涉猎了java ...

  3. Spring Boot 中 Druid 的监控页面配置

    Druid的性能相比HikariCp等其他数据库连接池有一定的差距,但是数据库的相关属性的监控,别的连接池可能还追不上,如图: 今天写一下 Spring Boot 中监控页面的配置,我是直接将seat ...

  4. 5.4.1 sequenceFile读写文件、记录边界、同步点、压缩排序、格式

    5.4.1      sequenceFile读写文件.记录边界.同步点.压缩排序.格式 HDFS和MapReduce是针对大文件优化的存储文本记录,不适合二进制类型的数据.SequenceFile作 ...

  5. Maven的概述和基础(学习整理)

    1. Maven是啥 Maven是一个项目管理工具,包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期(Lifecycle),一个依赖管理系统,和用来运行定义在生命周期阶段中的插件目标的 ...

  6. Web开发中 MTV模式与MVC模式的区别 联系 概念

    MTV 与 MVC模式的区别 联系 概念: MTV: 所谓MTV指的就是: M:model (模型),指的是ORM模型. T:template (模板),一般Python都是使用模板渲染的方式来把HT ...

  7. Rect和RectF函数

    1.是否包含点,矩形 判断是否包含某个点 boolean contains(int x,int y)  函数用于判断某个点是否在当前矩形中,如果在,则返回true ,不在则false 2.判断是否包含 ...

  8. java网络通信:异步非阻塞I/O (NIO)

    转: java网络通信:异步非阻塞I/O (NIO) 首先是channel,是一个双向的全双工的通道,可同时读写,而输入输出流都是单工的,要么读要么写.Channel分为两大类,分别是用于网络数据的S ...

  9. 免费的HTML5版uploadify

    转http://www.cnblogs.com/lvdabao/p/3452858.html var defaults = { fileTypeExts:'',//允许上传的文件类型,格式'*.jpg ...

  10. 关于Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法

    当Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法:只需要在jmeter的http信息头管理器中配置相应的设备信息,可通过抓包工具得到:即头信息Header中的Miscella ...