算法题7 判断扑克牌中的顺子
来源:互联网 发布:昆汀电影配乐知乎 编辑:程序博客网 时间:2024/06/16 02:32
题目
来源 http://www.cnblogs.com/python27/archive/2011/11/27/2264405.html
随机抽取扑克牌中的n张牌,判断是不是顺子,即这5张牌是不是连续的。其中A看成1,J看成11,Q看成12,K看成13,大小王可以看成任何需要的数字。
分析
对于扑克牌来说,数字范围是很明确的,1到K外加大小王(设定为M)。假如这副牌是个顺子,也就是每张牌都不相同,那么利用一个大小为14的辅助数组counts[]就可以快速的实现排序,记录每张牌出现的次数,然后遍历输出次数为1的值即可。
判断这副牌是不是一个连续数列,需要判断相邻两个数字的差是否为1,大于1的话由M来填充(可以填充两个缺位)。
因为这样一副牌最多不过54张,算法时间复杂度O(1),空间复杂度O(1)
代码
1 bool IsContinuousPoker(char* pokers,unsigned int n) 2 { 3 if (pokers==NULL||n==0) 4 throw std::exception("Invalid input."); 5 6 int *counts=new int[14](); 7 8 char *p=pokers; 9 unsigned int num=0;10 while (*p!='\0')11 {12 if (*p=='J')13 num=11;14 else if (*p=='Q')15 num=12;16 else if (*p=='K')17 num=13;18 else if(*p=='M')19 num=0;20 else21 num=*p-'0';22 23 counts[num]++;24 if(num!=0&&counts[num]>1)25 return false;26 27 p++;28 }29 30 int pre=0;31 for (int i=1;i<14;i++)32 {33 if (counts[i]==1)34 {35 int dif=i-pre-1;36 if (pre!=0&&dif>0)37 {38 counts[0]-=dif;39 if (counts[0]<0)40 return false; 41 }42 pre=i;43 }44 }45 return true;46 }
0 0
- 算法题7 判断扑克牌中的顺子
- 判断扑克牌中的顺子
- 算法题/扑克牌顺子
- 判断扑克牌的顺子
- 扑克牌中的顺子问题
- 扑克牌中的顺子
- 23 判断扑克牌的顺子
- 剑指offer44-扑克牌顺子判断
- 笔试题:扑克牌顺子
- 算法题目---扑克牌的顺子
- 算法:扑克牌的顺子问题
- 每天一道算法题(22)——扑克牌的顺子
- 44 - 判断扑克牌是否是顺子
- 扑克牌顺子
- 扑克牌顺子
- 扑克牌顺子
- 扑克牌顺子
- 扑克牌顺子
- 算法题3 寻找丑数&数值逼近
- 算法题4 斐波那契数列
- 算法题5 二进制中1的个数
- 算法题6 最大数对差值
- Matlab中NaN数据对图形的影响和近似极限处理
- 算法题7 判断扑克牌中的顺子
- 算法题8 动态规划之字符串相似度
- 309.Best Time to Buy and Sell Stock with Cooldown
- 算法题9 动态规划之最长公共子序列&最长公共子串
- 死锁、活锁、优先级翻转
- 算法题10 最长等差序列问题
- Android 中 onTouch 和OnClick 冲突的处理(onTouchEvent返回true时与onclick冲突)
- 算法题11 字符串的所有对称子串
- CodeForces 622C Not Equal on a Segment