题目要求
例子
思路
正常来说,肯定是定义一个二维数组,然后每次取出一对操作数进行操作,最后进行统计。但是!开一个行列都是一万以上的二维数组消耗实在太大了,于是需要想想别的办法。
题目要求统计操作结束后,矩阵中有多少个最大元素。这里会发现——不管操作是什么,(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; } };