保持城际天际线

在这里插入图片描述

class Solution {
    public int maxIncreaseKeepingSkyline(int[][] grid) {
	int max_x=0;
		        int max_y=0;
		        int len=grid.length;
		    
		        int[] mx=new int[len];
		        int []my=new int[len];
		        //y
		        for(int i=0;i<len;i++){
		        	max_y=grid[0][i];
		            for (int j=0;j<len;j++){
		            
		               if(grid[j][i]>=max_y){
		                   max_y=grid[j][i];
		                   my[i]=max_y;
		               }
		               
		        } 
		            
		        }
		        //x
		        for(int m=0;m<len;m++){
		        	max_x=grid[m][0];
		            for (int n=0;n<len;n++){
		               if(grid[m][n]>=max_x){
		                   max_x=grid[m][n];
		                   mx[m]=max_x;
		               }
		        } 
		        
		        }

		        int count=0;
		        for(int x=0;x<len;x++){
		            int min=0;
		            for(int y=0;y<len;y++){
		                if(mx[x]>=my[y]){
		                    min=my[y];
		                }else{
		                    min=mx[x];
		                }
		                if(min>grid[x][y])                count+=min-grid[x][y];
		            }
		        }
        return count;
    }
}

问题在于首先要算出他的天际线,其实就是看这个二维数组在xy方向上的最大值,然后每一个数不得大于他所在行和列的最大值,取所有数可取的最大值,最后算之后的数组相对之前增加了多少。不知道为什么官方答案中最大长度都是grid的长度,那如果只有三个数组的时候岂不是出问题了?但是运行没问题最上面的代码也可以通过,但是确实有问题。有没有人给我解释一下?

附上二维数组定义方法 https://zhidao.baidu.com/question/2119494855270780467.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值