846. Hand of Straights

Alice has a hand of cards, given as an array of integers.

Now she wants to rearrange the cards into groups so that each group is size W, and consists of W consecutive cards.

Return true if and only if she can.

 

Example 1:

Input: hand = [1,2,3,6,2,3,4,7,8], W = 3
Output: true
Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8].

Example 2:

Input: hand = [1,2,3,4,5], W = 4
Output: false
Explanation: Alice's hand can't be rearranged into groups of 4.

 

Constraints:

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

Note: This question is the same as 1296: https://leetcode.com/problems/divide-array-in-sets-of-k-consecutive-numbers/

又来重复题,你对得起交会员费的会员吗(不是我哈哈哈)?leetcode你没有心!(不过还是秒杀国内code平台)

class Solution {
    public boolean isNStraightHand(int[] hand, int w) {
        int le = hand.length;
        if(le % w != 0) return false;
        Map<Integer, Integer> map = new HashMap();
        PriorityQueue<Integer> pq = new PriorityQueue();
        for(int i : hand) map.put(i, map.getOrDefault(i, 0) + 1);
        for(int i : map.keySet()) pq.offer(i);
        
        while(!pq.isEmpty()) {
            int cur = pq.poll();
            if(map.get(cur) > 0) {
                int times = map.get(cur);
                for(int i = 0; i < w; i++) {
                    if(!map.containsKey(i + cur) || map.get(i + cur) < times) return false;
                    map.put(i + cur, map.get(i + cur) - times);
                }
            }
        }
        return true;
    }
}

按顺序尝试组成长度为k的集合,有个问题:

map.put(i + cur, map.get(i + cur) - times),不能直接携程 - map.get(cur),否则会报错,很奇怪
posted @ 2020-08-18 13:38  Schwifty  阅读(102)  评论(0编辑  收藏  举报