你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。

给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量 。

 

 

输入:wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]
输出:2

554. 砖墙_数组

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;
    }
}