题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。
为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。
样例1
输入:[8,9,10,11,12]
输出:true
样例2
输入:[0,8,9,11,12]
输出:true
问题分析
先将数组排序,然后将数组左边的0去掉,接下来遍历剩下的元素,看看有没有相邻元素相等的情况,如果有那么返回false。最后判断去掉0后剩下的子数组的首尾元素的差值,如果小于等于4,说明一定可以形成顺子,返回true,否则返回false。
代码实现
class Solution {
public:
bool isContinuous(vector<int> numbers) {
int n = numbers.size();
if(n != 5)
return false;
sort(numbers.begin(), numbers.end());
int i = 0;
for(; i < n; i++){
if(numbers[i])
break;
}
int l = i;
for(; i < n - 1; i++){
if(numbers[i] == numbers[i+1])
return false;
}
return (numbers[n-1] - numbers[l]) <= 4;
}
};