题目描述
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
建筑物高度可以增加的最大总和是多少?
解题代码
// 贪心来做 func maxIncreaseKeepingSkyline(grid [][]int) int { res := 0 var LAndR = make([]int, len(grid)) var FAndA = make([]int, len(grid[0])) // 观察左右天际线 for i, i2 := range grid { max := 0 for _, i3 := range i2 { if max < i3 { max = i3 } } LAndR[i] = max } // 观察前后天际线 for i := 0; i < len(grid[0]); i++ { max := 0 for j := 0; j < len(grid); j++ { if grid[j][i] > max { max = grid[j][i] } } FAndA[i] = max } // 建筑物高度可以增加的最大总和 for i, ints := range grid { for j, i1 := range ints { if LAndR[i] > FAndA[j] { res += FAndA[j] - i1 } else { res += LAndR[i] - i1 } } } return res }
感觉我又可以贪了: