目录
牛客_JZ61扑克牌顺子_排序
描述:
现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:
1. A为1,J为11,Q为12,K为13,A不能视为14
2. 大、小王为 0,0可以看作任意牌
3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
要求:空间复杂度 O(1),时间复杂度 O(nlogn),本题也有时间复杂度 O(n)的解法
输入描述:
输入五张扑克牌的值
返回值描述:
五张扑克牌能否组成顺子。
题目解析
如果能够构成顺子的话,所有的非零元素应该满足下面两个条件:
- 不能出现重复元素。
- max - min <= 4
C++代码
class Solution
{
bool hash[14] = { 0 };
public:
bool IsContinuous(vector<int>& numbers)
{
int maxVal = 0, minVal = 14;
for(auto x : numbers)
{
if(x)
{
if(hash[x]) return false;
hash[x] = true;
maxVal = max(maxVal, x);
minVal = min(minVal, x);
}
}
return maxVal - minVal <= 4;
}
};
Java代码
import java.util.*;
public class Solution
{
public boolean IsContinuous (int[] numbers)
{
boolean[] hash = new boolean[14];
int maxVal = 0, minVal = 14;
for(int x : numbers)
{
if(x != 0)
{
if(hash[x]) return false;
hash[x] = true;
maxVal = Math.max(maxVal, x);
minVal = Math.min(minVal, x);
}
}
return maxVal - minVal <= 4;
}
}