思路:对数组进行排序,然后记录下 0 的个数,遍历后面的数组,如果数字是不连续的计算我们需要在中间补齐多少个 0,如果能够补齐则继续,不能则说明不能成为顺子。
import java.util.*;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers == null || numbers.length <= 0) return false;//需要注意为[]的情况
int n = numbers.length, cnt = 0;
boolean flag = true;
Arrays.sort(numbers);
for(int i = 0; i < n; ++ i) {
if(numbers[i] == 0) ++ cnt;
}
int val = 0;
for(int i = 0; i < n; ++ i) {
if(numbers[i] == 0) continue;
if(val == 0) {
val ++;
} else {
int cnt0 = numbers[i] - numbers[i - 1] - 1;
if(cnt0 >= 0 && cnt0 <= cnt) cnt -= cnt0;
else {
flag = false;
break;
}
}
}
return flag;
}
} 
京公网安备 11010502036488号