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'shand
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'shand
can't be rearranged into groups of4
.
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),否则会报错,很奇怪