598. 范围求和 II
难度 简单
给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。
操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。
在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。
示例 1:
输入: m = 3, n = 3 operations = [[2,2],[3,3]] 输出: 4 解释: 初始状态, M = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 执行完操作 [2,2] 后, M = [[1, 1, 0], [1, 1, 0], [0, 0, 0]] 执行完操作 [3,3] 后, M = [[2, 2, 1], [2, 2, 1], [1, 1, 1]] M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
注意:
- m 和 n 的范围是 [1,40000]。
- a 的范围是 [1,m],b 的范围是 [1,n]。
- 操作数目不超过 10000。
题解
因为矩阵初始都是0 每次都加1 所以把操作的交集的个数算出来即可 初始化min0=m 初始化min1=n 以访不进行操作 最大的个数就是矩阵的大小
class Solution { public int maxCount(int m, int n, int[][] ops) { int min0=m; int min1=n; for(int i=0;i<ops.length;i++){ if(i==0){ min0=ops[0][0]; min1=ops[0][1]; }else{ if(ops[i][0]<min0){ min0=ops[i][0]; } if(ops[i][1]<min1){ min1=ops[i][1]; } } } return min0*min1; } }