这个问题思路很简单主要是提升效率,把水平天际线和垂直的天际线放到一个循环里面去求值,这样可以省下一个O(n*n)的时间,然后求增加总量的时候,同样只用一个循环。
问题链接:https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/
代码:
public int maxIncreaseKeepingSkyline(int[][] grid) {
int result = 0;
int[] vertical = new int[grid[0].length]; //垂直
int[] horizontal = new int[grid.length]; //水平
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
vertical[j] = Math.max(grid[i][j],vertical[j]);
horizontal[i] = Math.max(grid[i][j],horizontal[i]);
}
}
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
result+=Math.min(horizontal[i],vertical[j])-grid[i][j];
}
}
return result;
}