// 面试题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》第六十一题(扑克牌的顺子)的更多相关文章

  1. 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)

    // 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...

  2. 《剑指offer》第十一题(旋转数组的最小数字)

    // 面试题:旋转数组的最小数字 // 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. // 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组 // {3, ...

  3. 剑指offer第六章

    剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...

  4. 剑指Offer(二十一):栈的压入、弹出序列

    剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  5. 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)

    剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...

  6. [持久更新] 剑指offer题目Python做题记录

    第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...

  7. 【剑指Offer】俯视50题之21 - 30题

    面试题21包括min函数的栈  面试题22栈的压入.弹出序列  面试题23从上往下打印二叉树  面试题24二叉搜索树的后序遍历序列  面试题25二叉树中和为某一值的路径  面试题26复杂链表的复制  ...

  8. 《剑指offer》第十三题(机器人的运动范围)

    // 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...

  9. 剑指offer四十五之扑克牌顺子(序列是否连续)

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

  10. 算法学习之剑指offer(六)

    题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...

随机推荐

  1. Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件

    0x00 概述 Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目.来源于谷歌BorgMon项目.现在最常见的Kubernetes容器管理系统中,通常会搭配Pro ...

  2. enq: TM - contention一例

    今天下午,有台服务器出现异常,响应特别慢,io等待奇高,awr top 5事件如下: 经回查ash,找到了造成这些事件的sql语句,如下: select * from v$active_session ...

  3. webstorm 安装与基本使用

    1.1 webstorm 安装与配置 1.安装: https://blog.csdn.net/jiangxinyu50/article/details/79104016 2.使用: https://w ...

  4. ldap集成nexus

    nexus版本:2.14.4 添加nexus支持ldap认证: 管理员登录,点击 Administration --> Server -->Security Settings,将 OSS ...

  5. [C++ Primer Plus] 第2章、开始学习c++

    一.程序清单2.1(代码和书略不一样) #include<iostream> using namespace std;//使用std这个命名空间,才能正确找到cin和cout,如果不使用命 ...

  6. Black Hat Python3 Chapter4

    mail sniffer 现在的邮箱应用我能找到的都是加密传输了,因此相像书中那样直接从抓到的包里获取到用户名和密码信息除非是自己专门搭建一个邮箱服务器,不然很难做到,为了便于理解代码的运行,多添加一 ...

  7. Git pull的时候遇到问题

    转载:https://www.jianshu.com/p/7b1c58e0a9ef 使用git从远程pull代码时报错: error: The following untracked working ...

  8. java 动态代理总结

    首先:定义一个接口// 只能是一个接口 例: package DongTai; public interface dongtai { public void show(); } 接着:定义一个被代理类 ...

  9. tp框架中的一些疑点知识-3

    rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...

  10. (转)开源项目miaosha(下)

    石墨文档:https://shimo.im/docs/2XlwliBQAYsKCHbq/ (二期)20.开源秒杀项目miaosha解读(下) [课程20]jmeter.xmind81.5KB [课程2 ...