算法 扑克牌顺子
一副牌中有4个大小王(数字0表示,其它牌为1~13),可以代表任何牌,现在抽取5张牌,判断能否组成顺子
传统思路:
统计0的数目,然后其它牌排序,判断是否有间隙,且间隙能被0填充
进阶思路:
统计每张牌出现数目,若超过1次,必定不能组成顺子
记录遍历每张牌途中的最大最小值(区间) 0跳过
若最后 max-min<5 说明一定能组成顺子
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
int size=numbers.size();
if(size<5)
return false;
int max=-1;
int min=14;
int count[14]={0};//每张牌的数目
for(int i=0;i<size;i++)
{
count[numbers[i]]++;
if(numbers[i]==0)
continue;
if(count[numbers[i]]>1)
return false;//有重复的牌
if(numbers[i]<min)
min=numbers[i];
if(numbers[i]>max)
max=numbers[i];
}
if(max-min<5)
return true;
else
return false;
}
};