美文网首页
61.扑克牌中的顺子(简单)

61.扑克牌中的顺子(简单)

作者: 今天柚稚了么 | 来源:发表于2020-02-26 23:11 被阅读0次

    考点:本题考查抽象建模能力

    题目描述:

    从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
    输入: [0,0,1,2,5]
    输出: True

    思路:

    数组排序,统计数组中0的个数,统计排序后的数组中相邻数字之间的空缺总数,如果空缺总数小于等于0的个数,那么这个数组就是连续的。

    import java.util.Arrays;
    public class Solution {
        public boolean isContinuous(int [] numbers) {
            if(numbers==null||numbers.length<=0)
                return false;
            Arrays.sort(numbers);
            int numberZero = 0;
            int numberGap = 0;
            //统计数组中0的个数
            for(int i=0;i<numbers.length&&numbers[i]==0;i++)
                numberZero++;
            //统计排序后的数组中相邻数字之间的空缺总数
            int small = numberZero;
            int big = small + 1;
            while(big<numbers.length){
                if(numbers[small]==numbers[big])
                    return false;
                numberGap = (numbers[big]-numbers[small]-1)+numberGap;
                small = big;
                big++;
            }
            if(numberGap <= numberZero)
                return true;
            return false;
        }
    }
    

    排序的时间复杂度为O(nlogn),不够快。但是不同级别的时间复杂度只有当n足够大的时候才有意义,这道题目中数组的长度是固定的,只有五张牌,O(n)和O(nlogn)不会有多少区别。

    相关文章

      网友评论

          本文标题:61.扑克牌中的顺子(简单)

          本文链接:https://www.haomeiwen.com/subject/rbucqhtx.html