1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| type Box struct { Left int Right int Height int }
func fallingSquares(positions [][]int) []int { boxes := []Box{} ans := []int{} max := 0
for _, p := range positions { left := p[0] right := p[0] + p[1] height := p[1] bottom := 0
for _, b := range boxes { if !(left >= b.Right || right <= b.Left) && bottom < b.Height { bottom = b.Height } }
height += bottom if height > max { ans = append(ans, height) max = height } else { ans = append(ans, max) }
boxes = append(boxes, Box{Left: left, Right: right, Height: height}) }
return ans }
|