https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/
这个题没啥意思,标着medium,其实就是easy难度。
一开始我分别用了两个循环去找行最高值和列最高值,提交之后才意识到其实这两个可以合在一起找。但是效率好像并没有提高多少,毕竟都是O(n^2)级别。
/** * 807. * 其实这个题也很好理解,就是去找同一行、同一列中最大的值,然后另起一个循环,去找一当前行、列中的最大值的较小值,看这个较小值和当前高度之差。 * @param grid * @return */ public int maxIncreaseKeepingSkyline(int[][] grid) { int sum = 0; int[] cHigh = new int[grid[0].length]; int[] rHigh = new int[grid.length]; for(int i = 0; i < grid.length; i++){ for (int j = 0; j < grid[0].length; j++){ rHigh[i] = Math.max(rHigh[i],grid[i][j]); cHigh[j] = Math.max(cHigh[j],grid[i][j]); } } for(int i = 0; i < grid.length; i++){ for (int j = 0; j < grid[i].length; j++){ sum += (Math.min(rHigh[i],cHigh[j]) - grid[i][j]); } } return sum; }