leetcode-846:一手顺子

简介: leetcode-846:一手顺子

题目

题目链接

Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。

给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。

示例 1:

输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
输出:true
解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2,3,4],[6,7,8]。

示例 2:

输入:hand = [1,2,3,4,5], groupSize = 4
输出:false
解释:Alice 手中的牌无法被重新排列成几个大小为 4 的组。

解题

方法一:贪心

参考链接

首先从小到大排序

通过map记录每个数出现的次数。

然后遍历hand, 如果存在x,就map[x]-- ,然后找x+1,找到就map[x+1]–,…否则的话,就说明找不到,返回false

也就是说按照遇到的第一个数,当作顺子的开头,然后寻找第2、3、…、groupSize的数是否存在,不存在就返回false。

class Solution {
public:
    bool isNStraightHand(vector<int>& hand, int groupSize) {
        int n=hand.size();
        if(n%groupSize!=0) return false;
        sort(hand.begin(),hand.end());
        unordered_map<int,int> map;
        for(int x:hand){
            map[x]++;
        }
        for(int x:hand){
            if(map.count(x)==0) continue;
            for(int j=0;j<groupSize;j++){
                int num=x+j;
                if(map.count(num)==0) return false;
                map[num]--;
                if(map[num]==0) map.erase(num);
            }
        }
        return true;
    }
};
相关文章
|
8月前
剑指 Offer 61:扑克牌中的顺子
剑指 Offer 61:扑克牌中的顺子
44 0
|
8月前
|
Java
【LeetCode-六月每日一题-】-回文数
【LeetCode-六月每日一题-】-回文数
|
存储 测试技术
LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛
往期回顾:[LeetCode 单周赛第 350 场 · 滑动窗口与离散化模板题](https://mp.weixin.qq.com/s/7_neqKFSRMANFTxtVj64gA)
48 0
LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
74 0
|
存储 人工智能
【蓝桥杯集训·每日一题】AcWing 3662. 最大上升子序列和
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 树状数组
89 0
|
存储 算法 Java
leetcode每日一题:数组专练篇第二期(2/2)
leetcode每日一题:数组专练篇第二期(2/2)
【力扣】爬楼梯问题 小时候家长考过你吗?
【力扣】爬楼梯问题 小时候家长考过你吗?
124 0
【力扣】爬楼梯问题 小时候家长考过你吗?
|
Java Python
【LeetCode每日一题】剑指 Offer 14- I. 剪绳子(持续更新)
【LeetCode每日一题】剑指 Offer 14- I. 剪绳子(持续更新)
56 0