赞
踩
题目:相当于俄罗斯方块下落,如果当前方块下面有方块,就会叠上去,给一个方块数组,求每个方块的高度,不过这句话要做修改,是记录目前所有已经落稳的== 方块堆叠的最高高度 ==,即如果当前方块的高度小于之前堆叠的最高高度,当前高度赋值为堆叠的最高高度
思路:很明显的区间查询和区间修改,用线段树来做,可惜我不会,直接用暴力方法
1.遍历方块数组
2.遍历当前方块之前的方块数组
3.如果当前方块与之前的方块重合
则height[i] = max(height[i], height[j]+curHeight)
func fallingSquares(positions [][]int) []int { height := make([]int, len(positions)) for i, v := range positions { //当前这个方块 l1, r1, curHeight := v[0], v[0]+v[1]-1, v[1] height[i] = curHeight for j, vv := range positions[:i] { //该点之前落下的方块 l2, r2 := vv[0], vv[0]+vv[1]-1 if !(r1 < l2 || l1 > r2) { //如果两个方块有重叠 height[i] = max(height[i], height[j]+curHeight) } } } for i := 1; i < len(height); i++ { height[i] = max(height[i], height[i-1]) } return height } func max(i, j int) int { if i > j { return i } return j }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。