前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >脚撕LeetCode(剑指Offer61)Easy

脚撕LeetCode(剑指Offer61)Easy

作者头像
JathonKatu
发布2022-01-18 08:11:52
1090
发布2022-01-18 08:11:52
举报
文章被收录于专栏:JathonKatu

题目地址:https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/

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

这道题看题意,顺子,首先是五个连号,那么这五个之内就不能出现重复,且如果漏了的就用joker补。只要保证最大-最小>5,且无重复就一定会有顺子,因此我们引出第一个爆破法

一、爆破法一

用set保存,查看是否重复,如果遍历到0就跳过,并且设置最大最小值。

如果最大-最小<5,且无重复则一定是顺子

执行结果如下:

203 / 203 个通过测试用例

状态:通过

执行用时: 1 ms

内存消耗: 35.9 MB

代码语言:javascript
复制
public boolean isStraightMe(int[] nums) {
    int max = 0, min = 14;
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < nums.length; i++) {
        if(0 == nums[i]) continue;
        if(set.contains(nums[i])) return false;
        max = Math.max(max, nums[i]);
        min = Math.min(min, nums[i]);
        set.add(nums[i]);
    }
    return max - min < 5;
}

二、评论区大佬法

评论区大佬的办法先排序,然后遍历到0就joker++,如果出现重复提前返回false,最后从非0开始到最后一位数只要差值小于5则说明是顺子

执行结果如下:

203 / 203 个通过测试用例

状态:通过

执行用时: 1 ms

内存消耗: 35.9 MB

代码语言:javascript
复制
public boolean isStraight(int[] nums) {
    int joker = 0;
    Arrays.sort(nums);
    for (int i = 0; i < 4; i++) {
        if (0 == nums[i]) {
            joker++;
        } else if (nums[i] == nums[i + 1]) {
            return false;
        }
    }
    return (nums[4] - nums[joker]) < 5;
}

时间和空间上没什么差别,但评论区大佬的办法显然更加巧妙

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档