Given an mn 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 return4.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.
二、题解
(1) 暴力(超时)
/*** @thought:暴力破解(超时):** 因为a>0,b>0,故每一个操作都会涉及到M[0][0],故我们完成每个操作后,* 再次遍历矩阵,看有多少个元素是等于M[0][0]就知道最大元素有多少个了*/publicintmaxCount(int m,int n,int[][] ops){int[][] M =newint[m][n];int maxCount =0;for(int[] op : ops)for(int i =0; i < op[0]; i++)for(int j =0; j < op[1]; j++)M[i][j]++;for(int i =0; i < m; i++)for(int j =0; j < n; j++)if(M[i][j]==M[0][0])maxCount++;return maxCount;}
复杂度分析
时间复杂度: O(x?m?n),x 是 ops 数组的行数。
空间复杂度:O(m?n)
(2) 脑筋急转弯
/*** @thought:脑筋急转弯:因为a影响矩阵M的每一行的元素,b影响每一列的元素。* 因此,对于最小的a1和b1,其他ai和bi的操作范围都会覆盖a1,b1,* 故我们只需找出被操作的最小面积即可(即 a1*b1)** @date: 1/17/2020 3:49 PM* @Execution info:* ·执行用时 0 ms 击败了 100% 的java用户* ·内存消耗 MB 击败了 % 的java用户* @Asymptotic Time Complexity:O()*/publicintmaxCount2(int m,int n,int[][] ops){for(int[] op : ops){if(op[0]< m) m=op[0];if(op[1]< n) n=op[1];}return m * n;}