扑克牌顺子
Posted lune-qiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扑克牌顺子相关的知识,希望对你有一定的参考价值。
题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10位数字本身,A为1,J为11,Q为12,K为13,而大王,小王可以看成任意数字。为了方便我们将大小王看成0。
思路:
1.找出5张牌中得大小王,即0的个数
2.将牌排序,找出相邻牌中的空隙数
3.如果空缺的总数小于或等于0的个数,那么数组是连续的。
在下面的代码中,使用了sort函数,第一个参数为数组首地址,第二个参数为数组尾地址,第三个参数为排序规则。默认为升序
我的代码:
bool IsContinuous( vector<int> numbers ) { int len = numbers.size(); if(len<5) return false; sort(numbers.begin(),numbers.end()); int ZeroNum = 0; int GapNum = 0; for(int i = 0; i < len;i++) { if(numbers[i] == 0) ZeroNum++; } int x = ZeroNum; for(int j = ZeroNum+1; j < len;j++) { if(numbers[j] == numbers[x]) return false; GapNum += numbers[j] - numbers[x] -1;//正常是相差一个,如果不连续的话就是间隔 x = j; } return ZeroNum >= GapNum ? true : false; }
以上是关于扑克牌顺子的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数