题目
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌, 想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不 高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL 决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何。为了方便起见,你可以认为大小王是0。
分析
(1)排序
(2)计算其中0的个数
(3)计算整个数组的间隔数,这个过程中要注意0不在计算范围之内
(4)0的个数大于等于间隔数,就可以填充到间隔中,形成顺子
代码
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers == null || numbers.length == 0){
return false;
}
// 数组排序
Arrays.sort(numbers);
// 记录0的个数
int numberOfZero = 0;
// 数组前后两个元素之间的间隔数
int interval = 0;
for(int i = 0;i<numbers.length-1;i++){
// 计算0的个数
if(numbers[i] == 0)
numberOfZero++;
//如果数组出现对子,是绝对不会是顺子的,但是要排除0
if(numbers[i] == numbers[i+1] && numbers[i] != 0)
return false;
// 计算前后元素之间的间隔之和
if(numbers[i] != 0 && numbers[i+1] != 0)
// 相差为2的两个元素,中间只需要一个0,所以-1
interval += numbers[i+1] - numbers[i] - 1;
}
return interval > numberOfZero ? false:true;
}
}