598. Range Addition II
Descripition
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 all0 <= i < a
and0 <= j < b
.
You need to count and return the number of maximum integers in the matrix after performing all the operations.
Example: 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.
Solution
- 题意即给一个初始化的数组(均为零),以及一些二元组,要求将二元组范围内的(见题目描述)数加一。最终返回最大数的数目。
- 分析题目,我们可以发现,不论二元组是什么,总是从(0,0)开始累加,这就启发我们去找这些二元组的交集。交集内的数一定是最大数,我们可以获得二元组各个元素的最小值,结果便是这些最小值的乘积,代码如下。
class Solution {
public:
long long maxCount(int m, int n, vector<vector<int>>& ops) {
if (ops.size() == 0) return m * n; //如果未给出二元组,那么返回原始数组的大小,因为0就是最大值。
int min_row = ops[0][0],min_col = ops[0][1];
for (int i = 1;i < ops.size();i++) {
min_row = min(min_row,ops[i][0]);
min_col = min(min_col,ops[i][1]);
}
return min_row * min_col;
}
};