Alice has some number of cards and she wants to rearrange the cards into groups so that each group is of size groupSize
, and consists of groupSize
consecutive cards.
Given an integer array hand
where hand[i]
is the value written on the ith
card and an integer groupSize
, return true
if she can rearrange the cards, or false
otherwise.
Example 1:
Input: hand = [1,2,3,6,2,3,4,7,8], groupSize = 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], groupSize = 4 Output: false Explanation: Alice's hand can not be rearranged into groups of 4.
Constraints:
1 <= hand.length <= 104
0 <= hand[i] <= 109
1 <= groupSize <= hand.length
思路:统计词频,然后把card丢到pq里面,每次出来最小的,然后看hashmap里面有没有key + i,有就减去频率;
class Solution {
public boolean isNStraightHand(int[] hand, int groupSize) {
if(hand.length % groupSize != 0) {
return false;
}
HashMap<Integer, Integer> hashmap = new HashMap<>();
for(int card: hand) {
hashmap.put(card, hashmap.getOrDefault(card, 0) + 1);
}
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
pq.addAll(hashmap.keySet());
while(!pq.isEmpty()) {
int card = pq.poll();
int num = hashmap.get(card);
if(num > 0) {
for(int i = 0; i < groupSize; i++) {
int newcard = card + i;
if(!hashmap.containsKey(newcard) || hashmap.get(newcard) < num) {
return false;
} else {
hashmap.put(newcard, hashmap.get(newcard) - num);
}
}
}
}
return true;
}
}