终于有点有意思的题目了。
题意是给一个都是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;
}
};