Leetcode P846 Java使用Hash表解决此问题
ideas
首先我们创建一个Map集合用来记录每个元素所出现的个数
Map<Integer,Integer> map = new HashMap<>();
for (int i : hand) {
map.put(i,map.getOrDefault(i,0)+1);
}
接下来我们要对数组从小到大排序,排序为了计算是否为顺子,如果我们没有排序的排是
5 4 3
那么我们遍历数组就是从5开始 就无法计算是否为顺子,所以我们对数组进行遍历变成
3 4 5
然后从3开始遍历,然后计算3到3+groupSize之间的数字是否在map中,如果不存在那么就跳出当前循环进入下一次循环,因为如果不存在那么这个数就已经被计算过了,如果存在那么就对当前的数字到当前数字+groupSize之间判断是否在map中存在,如果不存在就返回false,如果存在就对当前数组对应的Val-1,之后对应的val为0,那么就删除对应的Key。
Arrays.sort(hand);
for (int num : hand) {
if (!map.containsKey(num))
continue;
for (int i = num; i < num+groupSize ; i++) {
if (map.containsKey(i)){
map.put(i,map.get(i)-1);
if (map.get(i) == 0){
map.remove(i);
}else{
}
}else{
System.out.println(i);
return false;
}
}
}
code
class Solution {
public boolean isNStraightHand(int[] hand, int groupSize) {
Map<Integer,Integer> map = new HashMap<>();
for (int i : hand) {
map.put(i,map.getOrDefault(i,0)+1);
}
Arrays.sort(hand);
for (int num : hand) {
if (!map.containsKey(num))
continue;
for (int i = num; i < num+groupSize ; i++) {
if (map.containsKey(i)){
map.put(i,map.get(i)-1);
if (map.get(i) == 0){
map.remove(i);
}else{
}
}else{
System.out.println(i);
return false;
}
}
}
return true;
}
}