807. Max Increase to Keep City Skyline
class Solution { public int maxIncreaseKeepingSkyline(int[][] grid) { int[] rowMax = new int[grid.length]; int[] colMax = new int[grid[0].length]; for (int i = 0; i < grid.length; i++){ int max = grid[i][0]; for (int j = 1; j max ){ max = grid[i][j]; } } rowMax[i] = max; } for (int j = 0 ; j < grid[0].length; j++){ int max = grid[0][j]; for (int i = 0; i max ){ max = grid[i][j]; } } colMax[j] = max; } int ans = 0; for (int i = 0; i < grid.length; i++){ for (int j = 0; j < grid[i].length; j++){ int min = Math.min(rowMax[i],colMax[j]); if(grid[i][j] <span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span>< min){ int add = min - grid[i][j]; ans+= add; } } } return ans; } }
Note:
Write colMax and rowMax in only one loop, instead of two loops
int[] rowMaxes = new int[N];
int[] colMaxes = new int[N];
for (int r = 0; r < N; ++r)
for (int c = 0; c < N; ++c) {
rowMaxes[r] = Math.max(rowMaxes[r], grid[r][c]);
colMaxes[c] = Math.max(colMaxes[c], grid[r][c]);
}