Leetcode 846:一手顺子

题目描述

爱丽丝有一手(hand)由整数数组给定的牌。 

现在她想把牌重新排列成组,使得每个组的大小都是 W,且由 W 张连续的牌组成。

如果她可以完成分组就返回 true,否则返回 false

 

示例 1:

输入:hand = [1,2,3,6,2,3,4,7,8], W = 3
输出:true
解释:爱丽丝的手牌可以被重新排列为 [1,2,3],[2,3,4],[6,7,8]

示例 2:

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

 

提示:

  1. 1 <= hand.length <= 10000
  2. 0 <= hand[i] <= 10^9
  3. 1 <= W <= hand.length

 

解题思路

建立一个map记录每张牌的数目,然后每W张查找一边,查找过程中:如果连续的不存在,则返回false;如果只有一张,则从map中删除;如果数目大于1张,则数目减一

bool isNStraightHand(vector& hand, int W) {
        int len = hand.size();
        if(len % W != 0) return false;
        map mp;
        for(int i=0;i 0){
            auto it = mp.begin();
            int i = 1,s = it->first;
            while(isecond == 1) mp.erase(tmp);
                else tmp->second--;
                i++;
            }
            if(isecond == 1) mp.erase(it);
            else it->second--;
        }
        return true;
    }

 

你可能感兴趣的:(Leetcode 846:一手顺子)