题目
你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。
你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。
给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量 。
代码&思路
对于给定的二维数组,行数是固定的。故任意画一条垂线(不包括两条沿着墙的边界线),垂线穿过的砖块数量与穿过的砖块间缝隙数量之和是固定的n,故只要找到穿过缝隙数量最多的垂线,就能找到穿过砖块数量最少的情况。
记录每一行的缝隙位置,并且用字典记录出现次数,之后遍历字典,找到出现次数最多的缝隙,其位置就是垂线下去的位置。
规定缝隙的位置为缝隙前的砖块长度和(不算边界)。例如[1,1]的缝隙位置为1,[1,2,2,1]的缝隙位置为1,3,5
若字典中没有记录数据,说明除了边界线,砖墙没有缝隙,无论如何都要穿过n块砖
class Solution:
def leastBricks(self, wall: List[List[int]]) -> int:
n=len(wall) # n行砖块
D={} # 记录缝隙出现的次数
for i in range(n):
ind=0
for w in wall[i][:-1]:
if w+ind not in D:
D[w+ind]=1
else:
D[w+ind]+=1
ind+=w
# 按照缝隙出现次数降序排列
D1=sorted(D.items(),key=lambda x:x[1],reverse=True)
print(D)
if D!={}:
return n-D1[0][1]
else:
return n
1157

被折叠的 条评论
为什么被折叠?



