[LeetCode]C语言每日一题---保持城市天际线

目录

题目描述

一、审题

二、代码和解释

1.代码

2.解释

总结






题目描述

 





一、审题

题目看似很难,其实认真多读几遍就能懂,以下是我对题目的理解。




二、代码和解释




1.代码

int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize){
    int min,rowmax,colmax;
    int addsize;
    int n = *gridColSize;
    int sum = 0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++){
            rowmax = grid[i][j];
            colmax = grid[i][j];
            for(int x=0;x<n;x++){
                if(rowmax<grid[i][x])
                    rowmax = grid[i][x];//找到grid[i][j]所在的行的最大值
            }
            for(int y=0;y<n;y++){
                if(colmax<grid[y][j])
                    colmax = grid[y][j];//找到grid[i][j]所在的列的最小值
            }
            if(colmax>=rowmax)//找到能增高的极限,就是在rowmax和colmax找到最小值
                min = rowmax;
            else
                min = colmax;
            addsize = min - grid[i][j];//计算能增高的层数
            sum = sum + addsize;
        }
    }
    return sum;
}

2.解释

定义rowmax和colmax,之后用循环语句找到行和列的最大值,然后比较rowmax和colmax之中谁最小,找到能增加层数的极限min,最后用min减去原层数就能得到增加层数且不会改变天际线的最大值。函数的返回值为所有建筑物增加层数的总和sum





总结

耐心审题,看似长串其实很简单(大概qwq)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值