剑指offer:扑克牌顺子
首先定义个bool型的IsContinuous函数,有个数组型的参数,首先判断数组numbers的长度,小于等于4,返回错。将数组numbers进行从小到大进行排序,定义countZero的大小王数量为0,为了后面更新,index也为0,为了遍历,当索引小于数组的长度,并其中的某位为0时,大小王的数++;索引也++。for循环看i位和i+1位是不是相等,相等就错,elseif里判断相邻的数是不是来连续的,连续则继续,else语句中,计算两个挨着的数之间的差值并减去1,用大小王的总数减去总差值,更新countZero的值,如果为负值返回false,在整个循环后,countZero的值大于等于0,则返回true!!!
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
if(numbers.size()<=4 )return false;
sort(numbers.begin(),numbers.end());
int countZero = 0;
int index = 0;
while(index<numbers.size()&&numbers[index]==0){
countZero++;
index++;
}
for(int i = index;i<numbers.size()-1;++i){
if(numbers[i]==numbers[i+1]) return false;
else if((numbers[i]+1)==numbers[i+1]){continue;}
else{countZero-=(numbers[i+1]-numbers[i]-1);
}
if(countZero<0) return false;
}
return countZero>=0;
}
};
#剑指offer##23届找工作求助阵地#