题目描述:
解析:
随机抽的5张牌可以看成5个数字组成的数组,大、小王是特殊的数字,不妨定义为0.接下来只要判断5个数字是不是连续的。最直观的方法是排序,然后用0去补满数组中的空缺。如果排序后的数组不是连续的,即相邻的两个数字都相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。除此之外,还要注意非0数字重复出现,则该数组不是连续的。
代码:先对数组排序,然后统计0的个数,顺便统计不连续的数字之间的差值,最后如果差值小于等于0的个数则是连续的,否则就不是连续的。
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers == null || numbers.length != 5)
return false;
sort(numbers);
int zeroNum = 0;
int diff = 0;
for(int i = 0; i < 4; i++){
if(numbers[i] == 0)
zeroNum++;
else{
if(numbers[i] == numbers[i+1]){
return false;
}
diff += (numbers[i+1] - numbers[i] - 1);
}
}
if(zeroNum >= diff)
return true;
return false;
}
public void sort(int[] arr){
int len = arr.length;
for(int i = 0; i < len - 1; i++){
for(int j = 0; j < len - 1 - i; j++){
if(arr[j] > arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
}