题解 | #扑克牌顺子#(附带图解)

扑克牌顺子

http://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

思路:

从题中给出的有效信息:

  • 2副牌
  • 5张牌除大小王都是唯一的

故此我们可以采用遍历就可以解决这个问题,需要用到集合等数据结构

方法一:

具体做法:
将 nums 数组依次装入 set集合,遇到 0 则返回装下一个元素,出现重复元素则返回 false,并在其中记录max,min,最终max-min >= 5的都不是顺子;

具体过程如下图所示:
图片说明

import java.util.*;
public class Solution {
    public boolean IsContinuous(int [] numbers) {
        Set<Integer> set = new HashSet<>();
        int max = Integer.MIN_VALUE, min =Integer.MAX_VALUE;
        //遍历数组
        for (int number:
             numbers) {
            if(number == 0) {
                continue;
            }
            //包含相同牌则直接返回,否则加入
            if(set.contains(number)){
                return false;
            }else {
                set.add(number);
            }
            //每次遍历记录最大值,最小值
            max = StrictMath.max(max,number);
            min = StrictMath.min(min,number);
        }
        return max - min < 5;

    }
}

复杂度分析:

  • 时间复杂度:O(nlogn),时间主要花费在遍历数组
  • 空间复杂度:O(n),上申请set集合消耗了n的空间

方法二:

具体做法:
我们可以先将数组排序,然后将遍历数组记录大小王数量 ,重复则返回 false ,遍历结束取最大值和最小值进行比较 小于5即是顺子,

import java.util.*;
public class Solution {
    public boolean IsContinuous(int [] numbers) {
        int king = 0,max,min;
        //将数组排序
        Arrays.sort(numbers);
        for(int i = 0; i < 4; i++) {
            //记录王牌个数
            if(numbers[i] == 0) king++;
            else if(numbers[i] == numbers[i + 1]) return false;
        }
        max = numbers[4];
        min = numbers[king];// king的个数会占去前置位的数组,nums[king]必然是最小值
        //最大值和最小值进行比较小于5即是顺子
        return  numbers[4] - numbers[king] < 5;
    }
}

复杂度分析:

  • 时间复杂度:O(nlogn),时间主要花费在sort排序
  • 空间复杂度:O(n),上申请set集合消耗了n的空间
全部评论

相关推荐

昨天 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务