题目来源:LeetCode_554砖墙
首先我想到的是将[1,2,2,1]转化为[1,3,5,6]其中1-6没有的数字就是穿过会碰到砖块的位置e.g 2,4。
所以所以行中哪个数字出现的次数最多,那个就是碰到砖块次数最少的位置。
我们用哈希表来记录第n列会出现的次数。
注意要去掉最后一列,他是每次都会出现的。
得到的结果是所有行数-出现的最多次数。
public int leastBricks(List<List<Integer>> wall) {
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<wall.size();i++){
int sum=0;
for(int cur : wall.get(i)){
sum += cur;
map.put(sum,map.getOrDefault(sum,0)+1);
}
map.remove(sum);
}
int max = 0;
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
max = Math.max(max,entry.getValue());
}
return wall.size()-max;
}
这道题考察了对List和Map的遍历操作这让我好好研究了一下这些遍历操作写一篇博客记录一下。
以及熟悉了Map中getOrDefault(Key,DefaultValue)的用法。
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}