题目描述:
在二维平面上的 x 轴上,放置着一些方块。
给你一个二维整数数组 positions
,其中 positions[i] = [lefti, sideLengthi]
表示:第 i
个方块边长为 sideLengthi
,其左侧边与 x 轴上坐标点 lefti
对齐。
每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上 。一个方块仅仅是擦过另一个方块的左侧边或右侧边不算着陆。一旦着陆,它就会固定在原地,无法移动。
在每个方块掉落后,你必须记录目前所有已经落稳的 方块堆叠的最高高度 。
返回一个整数数组 ans
,其中 ans[i]
表示在第 i
块方块掉落后堆叠的最高高度。
输入输出实例:
思路:对于这道题目,我们需要遍历每个小方块,知道它的左右区间以及高度,对于后面落下来的方块我们还需要判断它是否落在之前下落的小方块上面,所以我们用一个数组square[[left,right,height]]来存储之前下落的小方块信息来判断是否落在之前的小方块上。定义current_height记录当前小方块落下来时候的高度,max_height记录当前小方块落下来之后的最高高度,将当前小方块信息放在square列表中,每遍历一个小方块返回一个当前最大值到目标列表里即可。根据上述思路有:
class Solution:
def fallingSquares(self, positions: List[List[int]]) -> List[int]:
ans = []
max_height = 0
square = []
for left,sidelength in positions :
right = left + sidelength
current_height = 0
for l,r,h in square:
if right > l and left < r :
current_height = max(current_height,h)#要么加0(轴上),要么加上落在某方块的方块高度
current_height += sidelength
square.append([left,right,current_height])
max_height = max(max_height,current_height)
ans.append(max_height)
return ans