807.保持城市天际线
题目描述
思路
贪心
根据题意,找到每个位置所处的行列的最高值,只要这个位置的值不超过行列最高值即可。
Java实现
class Solution {
public int maxIncreaseKeepingSkyline(int[][] grid) {
int[] maxRow = new int[grid.length], maxCol = new int[grid[0].length];
for (int i = 0; i < grid.length; i++) {
int m = 0;
for (int j = 0; j < grid[0].length; j++) {
m = Math.max(m, grid[i][j]);
}
maxRow[i] = m;
}
for (int i = 0; i < grid[0].length; i++) {
int m = 0;
for (int j = 0; j < grid.length; j++) {
m = Math.max(m, grid[j][i]);
}
maxCol[i] = m;
}
int ans = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
ans += Math.min(maxRow[i], maxCol[j]) - grid[i][j];
}
}
return ans;
}
}
Python实现
class Solution:
def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
rowsMax, colsMax = [max(g) for g in grid], [max(z) for z in zip(*grid)]
return sum(min(rowsMax[i], colsMax[j]) - grid[i][j] for i in range(len(grid)) for j in range(len(grid[0])))