/*
* 面试题61:扑克牌中的顺子
* 题目:从扑克牌中随机抽 5张牌,判断是不是顺子,即这 5张牌是不是连续的。
* 2-10为数字本身,A为 1,J为 11,Q为 12,K为13,
* 而大小王可以看成任意的数字,为了方便起见,你可以认为大小王是0。
* 思路:1、首先我们应该关注的是大小王等特殊字符,由于可以当成任意的数字,所有当成0处理。
* 2、把数组排序,再统计数组中0的个数
* 3、统计排序之后的数组中相邻数字之间的空缺总数。
* 4、数组中的非0数字重复出现,则该数组是不连续的。
* 5、如果空缺的总数小于或者等于0的个数,那么这个数组就是连续的,反之则不连续
*/
import java.util.Arrays;
public class No61isContinuous {
public static void main(String[] args) {
No61isContinuous n = new No61isContinuous();
int[] a= {0,6,5,4,2};
System.out.println(n.isContinuous(a));
}
public boolean isContinuous(int[] numbers) {
if (numbers == null || numbers.length == 0) {
return false;
}
int count0 = 0;
int diff = 0;
//第一步,先排序,否则计算间隔的时候可能会出现负值,比较麻烦
Arrays.sort(numbers);
for (int i = 0; i < numbers.length - 1; i++) {
//第二步,计算大小王的数量,即0的数量
if (numbers[i] == 0) {
count0++;
continue;
}
//第三步,计算两数之间的差值
if (numbers[i] != numbers[i + 1]) {//不可以出现重复的数字,除0以外
diff += numbers[i + 1] - numbers[i] - 1;
} else {
return false;
}
}
//如果差值小于0的数量,则返回true
if (diff <= count0) {
return true;
}
return false;
}
}
面试题61:扑克牌中的顺子
最新推荐文章于 2022-12-18 23:49:39 发布