Skip to content

Latest commit

 

History

History
29 lines (26 loc) · 1.09 KB

846.一手顺子.md

File metadata and controls

29 lines (26 loc) · 1.09 KB

方法一:贪心+优先级队列

这道题的核心就是将对组合的模拟,转移到了通过对每个数字出现次数计数来解决。如果如果是可以的列表,那么1之后必定要2,2之后必定要有3.如果这是一个组合那么只需要把这几个数的个数分别减1,然后再判断即可。

class Solution {
    public boolean isNStraightHand(int[] hand, int groupSize) {
        int n = hand.length;
        if (n % groupSize != 0) return false;
        PriorityQueue<Integer> queue = new PriorityQueue<>((a, b) -> a - b);
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : hand) {
            map.put(num, map.getOrDefault(num, 0) + 1);
            queue.add(num);
        }
        while (!queue.isEmpty()) {
            int num = queue.poll();
            if (map.get(num) == 0) continue;
            for (int i = num; i < num + groupSize; i++) {
                int cnt = map.getOrDefault(i, 0);
                if (cnt == 0) return false;
                map.put(i, map.get(i) - 1);
            }
        }
        return true;
    }
}