解法1:排序+遍历
1.进行排序 2.计算0的个数 3.看是否有对子 4.计算相邻数之间的间隔
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
int zero=0;//记录0的个数
int distance=0;//记录空缺的数
if(numbers.length==0){
return false;
}
Arrays.sort(numbers);
for(int i=0;i<numbers.length-1;i++){
if(numbers[i]==0){
zero++;//找不到非0的就继续下一次循环
continue;
}
if(numbers[i]!=numbers[i+1]){
distance=distance+numbers[i+1]-numbers[i]-1;
//4 和 8,中间空缺3
}
else
return false;//说明有对子,肯定不是顺子
}
if(distance<=zero)//0的数目大于空缺;
return true;
return false;
}
}解法2:最大值与最小值的差值应该小于5-count0;
首先不能有重复值;
不包含0的情况:没有重复值,形如[1 2 3 4 5] 会发现最大值与最小值的差值应该小于5
包含0:计算0出现的次数count,没有重复值,最大值与最小值的差值应该小于5-count;
即:用set来填充数据,0不要放进去。set的大小加上0的个数必须为5个。此外set中数值差值在5以内
import java.util.TreeSet;
public class Solution {
public boolean isContinuous(int [] n) {
if (n.length < 5 || n.length > 5) {
return false;
}
int num = 0;
TreeSet<Integer> set = new TreeSet<> ();
for (int i=0; i<n.length;i++) {
if (n[i]==0) {
num ++;
} else {
set.add(n[i]);
}
}
if ((num + set.size()) != 5) {
return false;
}
if ((set.last() - set.first()) < 5) {
return true;
}
return false;
}
}
京公网安备 11010502036488号