Given an m n matrix M initialized with all 0‘s and several update operations.
Operations are represented by a 2D array, and each operation is represented by an array with two positive integers a and b, which means M[i][j] should be added by one for all 0 <= i < a and 0 <= j < b.
You need to count and return the number of maximum integers in the matrix after performing all the operations.
Example 1:
Input:
m = 3, n = 3
operations = [[2,2],[3,3]]
Output: 4
*Explanation:
Initially, M =
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
After performing [2,2], M = [[1, 1, 0], [1, 1, 0], [0, 0, 0]]
After performing [3,3], M = [[2, 2, 1], [2, 2, 1], [1, 1, 1]]
So the maximum integer in M is 2, and there are four of it in M. So return 4.Note:
- The range of m and n is [1,40000].
- The range of a is [1,m], and the range of b is [1,n].
- The range of operations size won’t exceed 10,000.
Runtime: 4 ms, faster than 100.00% of C++ online submissions for Range Addition II.
class Solution {
public:
int maxCount(int m, int n, vector<vector<int>>& ops) {
int size = ops.size();
if (size < 1) {
return m * n;
}
int minX = ops[0][0];
int minY = ops[0][1];
for (int i = 1; i < size; i++) {
if (ops[i][0] < minX) {
minX = ops[i][0];
}
if (ops[i][1] < minY) {
minY = ops[i][1];
}
}
return minX * minY;
}
};
本题的思路非常简单,从提示中很明确我们需要找到 XY 两轴中最大的并集,由于两轴的起点都是从 [0, 0] 开始,因此只需要分别找到两个轴最小值即可。