1.题目
(记得先把题目读懂。。。。
2.解法
import java.util.Arrays;
public class Solution {
// numbers代表抽出的5张牌
public boolean isContinuous(int [] numbers) {
int len = numbers.length;
if(numbers == null || len < 5){
return false;
}
/** 对numbers排序,如果数字是连续的,那么中间就没有间隔
* 如果有间隔,就用0来弥补,间隔的个数<=0的个数,那么就连续
*/
Arrays.sort(numbers);
int countZero = 0;
int countGap = 0;
// 求0的个数
for (int i = 0; i < len && numbers[i] == 0; i++) {
++countZero;
}
// 统计数组中间隔的数目(从第一个非0数字开始)
int small = countZero;
int big = small + 1;
while(big < len){
// 两个数相等,有对子,不可能是顺子
if(numbers[small] == numbers[big]){
return false;
}
// 如果不相等的话,计算间隔
countGap += (numbers[big] - numbers[small] - 1);
small = big;
++big;
}
return countGap > countZero ? false : true;
}
}
时间复杂度为O(nlogn), 排序时间占用的,空间复杂度为O(1)