你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。
给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量 。
输入:wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]
输出:2
class Solution {
public int leastBricks(List<List<Integer>> wall) {
/**
哈希表记录 缝隙出现的下标,缝隙出现的次数
n-最大缝隙数目=所求答案
*/
HashMap<Integer,Integer> map=new HashMap();//缝隙出现的下标,缝隙出现的次数
int n=wall.size();//总行数
for(int i=0;i<wall.size();i++){
int sum=0;//记录缝隙出现的下标
for(int j=0;j<wall.get(i).size();j++){
sum+=wall.get(i).get(j);//记录缝隙出现的下标
map.put(sum,map.getOrDefault(sum,0)+1);//记录缝隙的次数
}
//得删除掉末尾的那个 也就是墙的末尾
map.remove(sum);
}
//找出缝隙最大的那个
int max=0;
Set<Integer> set=map.keySet();
Iterator<Integer> iter=set.iterator();
while(iter.hasNext()){
max=Math.max(max,map.get(iter.next()));
}
//返回N-缝隙最大次数
return n-max;
}
}