Skip to content

Commit 4b1a03b

Browse files
authored
Update Hand of Straights.java
1 parent 210a81b commit 4b1a03b

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

Medium/Hand of Straights.java

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
class Solution {
2-
public boolean isNStraightHand(int[] hand, int W) {
3-
if (hand.length % W != 0) {
4-
return false;
5-
}
6-
Map<Integer, Integer> counterMap = new HashMap<>();
7-
Set<Integer> set = new TreeSet<>();
8-
for (int num : hand) {
9-
counterMap.put(num, counterMap.getOrDefault(num, 0) + 1);
10-
set.add(num);
11-
}
12-
Iterator<Integer> iter = set.iterator();
13-
Integer curr = iter.next();
14-
while (counterMap.get(curr) > 0) {
15-
int temp = curr;
16-
for (int i = 0; i < W; i++) {
17-
if (counterMap.getOrDefault(temp, 0) == 0) {
18-
return false;
2+
public boolean isNStraightHand(int[] hand, int groupSize) {
3+
if (hand.length % groupSize != 0) {
4+
return false;
5+
}
6+
Map<Integer, Integer> map = new HashMap<>();
7+
for (int num : hand) {
8+
map.put(num, map.getOrDefault(num, 0) + 1);
9+
}
10+
PriorityQueue<Integer> pq = new PriorityQueue<>(map.keySet());
11+
while (!pq.isEmpty()) {
12+
List<Integer> temp = new ArrayList<>();
13+
int prev = -1;
14+
for (int i = 0; i < groupSize; i++) {
15+
if (pq.isEmpty()) {
16+
return false;
17+
}
18+
int removed = pq.remove();
19+
map.put(removed, map.get(removed) - 1);
20+
if (map.get(removed) > 0) {
21+
temp.add(removed);
22+
}
23+
if (prev != -1 && removed != prev + 1) {
24+
return false;
25+
}
26+
prev = removed;
27+
}
28+
pq.addAll(temp);
1929
}
20-
counterMap.put(temp, counterMap.get(temp) - 1);
21-
temp++;
22-
}
23-
while (iter.hasNext() && counterMap.get(curr) == 0) {
24-
curr = iter.next();
25-
}
30+
return true;
2631
}
27-
return true;
28-
}
2932
}

0 commit comments

Comments
 (0)