LeetCode 598. 范围求和 II

题目要求

LeetCode 598. 范围求和 II

 

例子

LeetCode 598. 范围求和 II

 

 

思路

    正常来说,肯定是定义一个二维数组,然后每次取出一对操作数进行操作,最后进行统计。但是!开一个行列都是一万以上的二维数组消耗实在太大了,于是需要想想别的办法。

    题目要求统计操作结束后,矩阵中有多少个最大元素。这里会发现——不管操作是什么,(0,0)这个点是一直被包括的。因此(0,0)一定是一个最大值,那么题目就变成了最后有几个跟(0,0)位置相等的元素。

 要想和(0,0)处元素相等,那么一次操作都不能少。每次对行的操作数为ops[i][0],对列的操作数为ops[i][1]。因此每次修改行数m为 m和行操作数的最小值,修改列数n为 n和列操作数的最小值,最终最大元素的个数为 m*n 个,因为这m*n个都经历过操作了

 

代码

 

class Solution {
public:
    int maxCount(int m, int n, vector<vector<int>>& ops) {
        for(int i=0;i<ops.size();i++){
            m = min(m,ops[i][0]);
            n = min(n,ops[i][1]);
        }
        return m*n;
    }
};

 

 

 

 

 

上一篇:598. 范围求和 II


下一篇:力扣 598范围求和 (寻找最小重合面积 java实现)