html做网站的设计,完整php网站开发,网店推广方案范文,最新热点新闻事件你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同#xff08;也就是一个单位高#xff09;但是宽度不同。每一行砖块的宽度之和应该相等。
你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过#xff0c;就不算穿过这块砖…你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同也就是一个单位高但是宽度不同。每一行砖块的宽度之和应该相等。
你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线这样显然是没有穿过一块砖的。
给你一个二维数组 wall 该数组包含这堵墙的相关信息。其中wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 并且返回 穿过的砖块数量 。
示例 1
输入wall [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]] 输出2 示例 2
输入wall [[1],[1],[1]] 输出3
来源力扣LeetCode 链接https://leetcode-cn.com/problems/brick-wall 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
解题思路
因为输入是一个二维数组因此我们可以将一维数组看成一行砖例如示例1
输入wall [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]] 输出2
第一行是[1,2,2,1]我们从这里分析因为题目要求 穿过的砖块数量最少所以对于每一行我们需要关注的是砖块之间的空隙去进行插入这样就能避免穿过砖块因此我们需要记录每一行砖块空隙的位置
例如 [1,2,2,1] 空隙坐标为 135左端和右端不算空隙
对于每一层我们使用map记录不同空隙坐标以及对应出现的次数出现次数最多的空隙坐标代表了有多层砖块都在这个位置出现空隙从这里穿过的空隙最小。
代码
func leastBricks(wall [][]int) int {m2 : make(map[int]int)n,res:len(wall),0for i : 0; i n; i {pre:0for j : 0; j len(wall[i])-1; j {prewall[i][j]i2,ok : m2[pre]if ok{m2[pre]i21}else {m2[pre]1}if m2[pre]res{resm2[pre]}}}return n-res
}