《剑指offer》第六十一题(扑克牌的顺子)
// 面试题61:扑克牌的顺子
// 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
// 2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 #include <iostream> int Compare(const void *arg1, const void *arg2); bool IsContinuous(int* numbers, int length)
{
if (numbers == nullptr || length < )//边界判断
return false; qsort(numbers, length, sizeof(int), Compare);//使用qsort排序,虽然qsort算法复杂度O(nlongn),但是n不大,和O(n)差不多 int numberOfZero = ;
int numberOfGap = ; // 统计数组中0的个数
for (int i = ; i < length && numbers[i] == ; ++i)
++numberOfZero; // 统计数组中的间隔数目
int small = numberOfZero;
int big = small + ;
while (big < length)
{
// 两个数相等,有对子,不可能是顺子
if (numbers[small] == numbers[big])
return false; numberOfGap += numbers[big] - numbers[small] - ;
small = big;
++big;
} return (numberOfGap > numberOfZero) ? false : true;
} int Compare(const void *arg1, const void *arg2)//充当qsort谓词
{
return *(int*)arg1 - *(int*)arg2;
} // ====================测试代码====================
void Test(const char* testName, int* numbers, int length, bool expected)
{
if (testName != nullptr)
printf("%s begins: ", testName); if (IsContinuous(numbers, length) == expected)
printf("Passed.\n");
else
printf("Failed.\n");
} void Test1()
{
int numbers[] = { , , , , };
Test("Test1", numbers, sizeof(numbers) / sizeof(int), true);
} void Test2()
{
int numbers[] = { , , , , };
Test("Test2", numbers, sizeof(numbers) / sizeof(int), false);
} void Test3()
{
int numbers[] = { , , , , };
Test("Test3", numbers, sizeof(numbers) / sizeof(int), true);
} void Test4()
{
int numbers[] = { , , , , };
Test("Test4", numbers, sizeof(numbers) / sizeof(int), false);
} void Test5()
{
int numbers[] = { , , , , };
Test("Test5", numbers, sizeof(numbers) / sizeof(int), true);
} void Test6()
{
int numbers[] = { , , , , };
Test("Test6", numbers, sizeof(numbers) / sizeof(int), false);
} void Test7()
{
int numbers[] = { , , , , };
Test("Test7", numbers, sizeof(numbers) / sizeof(int), true);
} void Test8()
{
int numbers[] = { , , , , };
Test("Test8", numbers, sizeof(numbers) / sizeof(int), false);
} void Test9()
{
int numbers[] = { , , , , };
Test("Test9", numbers, sizeof(numbers) / sizeof(int), true);
} void Test10()
{
int numbers[] = { , , , , };
Test("Test10", numbers, sizeof(numbers) / sizeof(int), true);
} // 有对子
void Test11()
{
int numbers[] = { , , , , };
Test("Test11", numbers, sizeof(numbers) / sizeof(int), false);
} // 鲁棒性测试
void Test12()
{
Test("Test12", nullptr, , false);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
Test9();
Test10();
Test11();
Test12();
system("pause");
return ;
}
《剑指offer》第六十一题(扑克牌的顺子)的更多相关文章
- 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)
// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...
- 《剑指offer》第十一题(旋转数组的最小数字)
// 面试题:旋转数组的最小数字 // 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. // 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组 // {3, ...
- 剑指offer第六章
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...
- 剑指Offer(二十一):栈的压入、弹出序列
剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...
- 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...
- [持久更新] 剑指offer题目Python做题记录
第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...
- 【剑指Offer】俯视50题之21 - 30题
面试题21包括min函数的栈 面试题22栈的压入.弹出序列 面试题23从上往下打印二叉树 面试题24二叉搜索树的后序遍历序列 面试题25二叉树中和为某一值的路径 面试题26复杂链表的复制 ...
- 《剑指offer》第十三题(机器人的运动范围)
// 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...
- 剑指offer四十五之扑克牌顺子(序列是否连续)
一.题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...
- 算法学习之剑指offer(六)
题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...
随机推荐
- P1383 高级打字机
P1383 高级打字机 主席树 一发主席树解决. 插入操作十分显然. 撤销操作复制前面的版本就行. 询问操作十分显然. #include<iostream> #include<cst ...
- android studio下载地址
AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/ 2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559 ...
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
- 标准库 time
go语言的time包 1. 组成 time.Duration(时长,耗时) time.Time(时间点)time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ]t ...
- 理解Linux文件系统之 inode
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会 ...
- CentOS7使用命令连接网络配置
背景 在安装完CentOS7无桌面的情况下,无法使用桌面图标连接,如下图所示,这时我们需要在配置文件中配置网络连接信息. 步骤 查看ip地址:ifconfig PS:在未连接网络之前,我们是查看不到i ...
- centos6.5下安装jdk并配置环境变量
链接: https://blog.csdn.net/wawawawawawaa/article/details/81158943 以下链接供参考: https://blog.csdn.net/Bugg ...
- R语言之正则表达式
常见与正则表达式相关的函数: grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, use ...
- c# Database类的使用
参考资料http://ansonlh.iteye.com/blog/1689009 搜索:c# DatabaseFactory类
- Windows,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正
https://blog.csdn.net/wyhwlls/article/details/80320301 近期window 10家庭版更新后,远程桌面连不到服务器了 网上有卸载补丁,修改组策略什么 ...