扑克牌的顺子
从扑克牌中随机抽5张牌,判断是不是顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
思路:首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之间的空缺总数。如果空缺的总数小于或等于0的个数,那么这个数组就是连续的;反之则不连续
public class ContinousCards {
public boolean isContinous(int[] numbers) {
if (Optional.ofNullable(numbers).isEmpty() || numbers.length <= 0) {
return false;
}
Arrays.sort(numbers);
int zeros = 0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 0) {
zeros++;
}
}
int gaps = 0;
int small = zeros;
int big = small + 1;
while (big < numbers.length) {
if (numbers[small] == numbers[big]) { // 有对子
return false;
}
gaps += numbers[big] - numbers[small] - 1;
small = big;
big++;
}
return (zeros >= gaps) ? true : false;
}
}







网友评论