剑指offer45:扑克牌顺子
1 题目描述
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:扑克牌顺子的更多相关文章
- 剑指Offer-45.扑克牌顺子(C++/Java)
题目: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定 ...
- 剑指Offer——扑克牌顺子
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 剑指offer--41.扑克牌顺子
没有判断数组长度,导致{1,3,2,5,4}输出结果是false是什么鬼??? ------------------------------------------------------------ ...
- 剑指Offer44 扑克牌的顺子
/************************************************************************* > File Name: 44_Contin ...
- 剑指offer——扑克牌的顺子
思想: 1.先将输入的几个数进行排序,sort函数是#include<algorithm>下的. 2.统计0的个数,以及相邻数的差值,比较0的个数及差值的和.看是否可以用大王填充中间的差值 ...
- 剑指Offer45 约瑟夫环
/************************************************************************* > File Name: 45_LastNu ...
- 剑指offer--45.二叉树的深度
时间限制:1秒 空间限制:32768K 热度指数:139716 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. -- ...
- 剑指offer44 扑克牌顺序
注意一个边界条件:必须是连续的,如果前后两个数是一样的也不满足条件 class Solution { public: bool IsContinuous( vector<int> numb ...
- 【剑指offer】扑克牌的顺子
个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ."红心A,黑桃3,小王,大王,方片 ...
随机推荐
- B. Uniqueness(尺取)
B. Uniqueness time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 全网最新Kali Linux系统如何安装N卡驱动
转载请注明来源:全网最新Kali Linux系统如何安装N卡驱动[亲测-暗影精灵3-1050TI有效] - 大家好,我系渣渣辉 https://www.zzhsec.com/255.html 1.更换 ...
- Mysql触发器详解以及union的使用
---恢复内容开始--- Mysql触发器定义: 当一个表中有insert update delete事件发生,触发一个事件,执行一段代码.作用: 同步数据创建: create trigger 名称 ...
- PHP学习之图像处理-水印类
<?php $image = new Image(); $image->water('./upload/up_5cf0caca0565b.png','./upload/up_5cf0cb3 ...
- Intent Flags
Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示 ...
- 18.flannel
18.flannel docker有四种常用网络 bridge joined opended 直接共享使用节点的网络名称空间 none k8s网络通信: 容器间的通信: 同一个Pod内的多个容器之间通 ...
- react对字符串转义成html并渲染
<div dangerouslySetInnerHTML={{__html: "字符串内容"}} />
- 使用rsync备份数据
(1).实验环境与目标 源主机:youxi1 192.168.5.101 目标主机:youxi2 192.168.5.102 目标:将源主机youxi1的数据备份到youxi2上. rsync是C/S ...
- jpa基于按annotation的hibernate主键生成策略
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hib ...
- layer弹框层学习笔记
这里对layer的笔记只是大概记录一下其使用过程,以便后续使用时快速回顾,更详细使用及介绍参考官网实例.链接在本文末 一 .初步了解layer-弹层之美 layer是一款近年来备受青睐的web弹层组件 ...