剑指offer | 扑克牌的顺子

2019-07-31  本文已影响0人  icebreakeros

扑克牌的顺子

从扑克牌中随机抽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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读