LeetCode 807. Max Increase to Keep City Skyline 保持城市天際線

In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located there. We are allowed to increase the height of any number of buildings, by any amount (the amounts can be different for different buildings). Height 0 is considered to be a building as well.

At the end, the "skyline" when viewed from all four directions of the grid, i.e. top, bottom, left, and right, must be the same as the skyline of the original grid. A city's skyline is the outer contour of the rectangles formed by all the buildings when viewed from a distance. See the following example.

What is the maximum total sum that the height of the buildings can be increased?

Example:
Input: grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
Output: 35
Explanation: 
The grid is:
[ [3, 0, 8, 4], 
  [2, 4, 5, 7],
  [9, 2, 6, 3],
  [0, 3, 1, 0] ]
The skyline viewed from top or bottom is: [9, 4, 8, 7]
The skyline viewed from left or right is: [8, 7, 9, 3]

The grid after increasing the height of buildings without affecting skylines is:

gridNew = [ [8, 4, 8, 7],
            [7, 4, 7, 7],
            [9, 4, 8, 7],
            [3, 3, 3, 3] ]
Notes:

1 < grid.length = grid[0].length <= 50.
All heights grid[i][j] are in the range [0, 100].
All buildings in grid[i][j] occupy the entire grid cell: that is, they are a 1 x 1 x grid[i][j] rectangular prism.

Solution:
//Kotlin
import java.lang.Integer.max
import java.lang.Integer.min

class Solution {
    fun maxIncreaseKeepingSkyline(grid: Array<IntArray>): Int {
        val xHeight = IntArray(grid[0].size)
        val yHeight = IntArray(grid.size)
        var sum = 0
        for ((x, row) in grid.withIndex()) {
            for ((y, value) in row.withIndex()) {
                xHeight[x] = max(xHeight[x], value)
                yHeight[y] = max(yHeight[y], value)
                sum -= value
            }
        }
        for (x in xHeight) {
            for (y in yHeight) {
                sum += min(x, y)
            }
        }
        return sum
    }
}
//Kotlin
class Solution {
    fun maxIncreaseKeepingSkyline(grid: Array<IntArray>): Int {
        val xHeight = IntArray(grid[0].size) { i -> grid.maxBy { it[i] }!![i] }
        val yHeight = IntArray(grid.size) { i -> grid[i].max()!! }
        var sum = 0
        xHeight.forEachIndexed { x, i ->
            yHeight.forEachIndexed { y, j ->
                sum += min(i, j) - grid[x][y]
            }
        }
        return sum
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,854評論 0 10
  • The Inner Game of Tennis W Timothy Gallwey Jonathan Cape ...
    網(wǎng)事_79a3閱讀 12,914評論 3 20
  • 如設置好的布景 那個漆黑的容器開始滲水 夜,唯一可藏身的地方 被浸漫!無處可逃 酸酸的記憶被咸澀中和 我被漂白成一...
    飛虹閱讀 275評論 2 8
  • 過度疲勞是一個怎樣的概念呢?怎樣可以不過度?如何掌握這個度? 疲勞,是什么?很多人或許都沒有一個正確的理解,以為爬...
    桔子花_1ded閱讀 325評論 0 0
  • /* 多個參數(shù)分別相加,單個函數(shù)內(nèi)的參數(shù)相乘 4 + 2 * 3 + 10 = 20*/function add ...
    有田春雪閱讀 1,449評論 0 2

友情鏈接更多精彩內(nèi)容