leetcode598. Range Addition II降维

终于有点有意思的题目了。

题意是给一个都是0的mn数组。

给一组操作。m[i][j]就死把数组的前i行前j列全部加1.

求最后最大的数的个数。

开始想用简单的模拟去做,数组明显超内存。

所以要用降维的思路。 开一个行的数组,一个列的数组。最后最大值肯定是m[0][0]。

最后乘积代表个数。

class Solution {
public:
    int maxCount(int m, int n, vector<vector<int>>& ops) {
        //R2  vector  init:
        //vector<vector<int>> a(m,vector<int>(n,0));
        /*
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
               a[i][j]=0;
            }
         
        }
        int x=ops.size();
      
        int ans=0;
        for(int i=0;i<x;i++){
            for(int j=0;j<ops[i][0];j++){
                for(int k=0;k<ops[i][1];k++){
                    a[j][k]++;
                    //cout<<"j"<<j<<"k"<<k<<"a[j][k]="<<a[j][k]<<endl;
                    ans=max(ans,a[j][k]);
                }
            }
        }
        int sum=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
               if(a[i][j]==ans) sum++;
            }
         
        }
        return sum;*/
        vector<int> wid(m,0);
        vector<int> log(n,0);
        int x=ops.size();
        for(int i=0;i<x;i++){
            for(int j=0;j<ops[i][0];j++){
                wid[j]++;
            }
            for(int k=0;k<ops[i][1];k++){
                log[k]++;
            }
        }
        int cntx=0,cnty=0;
        for(int i=0;i<m;i++){
            if(wid[i]==wid[0]) cntx++;
        }
        for(int i=0;i<n;i++){
            if(log[i]==log[0]) cnty++;
        }
        return cntx*cnty;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值