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;
    }
};
相关文章
|
9月前
|
测试技术
题目1444:蓝桥杯2014年第五届真题斐波那契
题目1444:蓝桥杯2014年第五届真题斐波那契
69 0
|
机器学习/深度学习 存储 人工智能
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
|
算法 测试技术
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
151 0
|
测试技术
题目2674:蓝桥杯2022年第十三届省赛真题-求阶乘
题目2674:蓝桥杯2022年第十三届省赛真题-求阶乘
题目 2664: 蓝桥杯2022年第十三届省赛真题-求和
题目 2664: 蓝桥杯2022年第十三届省赛真题-求和
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
|
存储 人工智能 BI
AcWing - 寒假每日一题2023(DAY 11——DAY 15)
AcWing - 寒假每日一题2023(DAY 11——DAY 15)
|
存储 人工智能 算法
AcWing - 寒假每日一题2023(DAY 6——DAY 10)
AcWing - 寒假每日一题2023(DAY 6——DAY 10)
|
机器学习/深度学习 测试技术
AcWing - 寒假每日一题2023(DAY 16——DAY 20)
AcWing - 寒假每日一题2023(DAY 16——DAY 20)