题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。在本题中看作0。
思路:
判断5个数字是不是连续的。
第一步:排序;
第二步:统计0的个数,统计间隙的个数;
第三步:间隙数大于0个数返回false,间隙数小于0的个数,更新0的个数,继续统计后面的数字是否有间隙。同时在此过程中也要统计前后两个数是否有重复情况,重复返回false。
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
int len = numbers.size();
if(len < 5)
return false;
sort(numbers.begin(),numbers.end());
int zeronum = 0;
for(int i=0;i<len;i++){ //统计0的个数
if(numbers[i]==0)
zeronum++;
}
int pre = numbers[zeronum];
int cur = 0;
for(int i=zeronum+1;i<len;i++){
cur = numbers[i];
if(cur - pre -1 > zeronum) //如果空隙大于0的数量,返回false
return false;
else if(cur - pre - 1 > 0){ //如果间隙在[1,zeronum]之间,更新一下zeronum
zeronum = zeronum - (cur - pre -1);
}
else if(cur == pre) //如果有重复的情况,返回false
return false;
pre = cur;
}
return true;
}
};