【数论】C

mac2026-01-22  5

一、题目

给定一个初始元素全部为 0,大小为 mn 的矩阵 M 以及记录在 M 上的一系列更新操作的数组 ops。返回操作完毕后,与mn矩阵中最大元素的个数。

输入: 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 的二维数组,遍历 ops,op 的元素将决定对 M 矩阵的操作范围,操作范围就相当于循环次数的上限。将矩阵遍历到的每一个元素 +1,又因为 M[0][0] 总是被操作到的,故通过遍历 M 矩阵,返回的与 M[0][0] 相等的元素的个数。 public int maxCount(int m, int n, int[][] ops) { // ops 是一个二维数组,元素代表操作m范围。 // 初始化一个 m*n 的二维数组 int[][] M = new int[m][n]; // 将每一个ops的遍历一遍,将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。 for(int[] op : ops) for(int i = 0; i < op[0]; i++) for(int j = 0; j < op[1]; j++) M[i][j] += 1; } int cnt = 0; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(M[i][j] == M[0][0]) ++cnt; return cnt; }

复杂度分析

时间复杂度: O ( m ∗ n ) O(m * n) O(mn),空间复杂度: O ( m ∗ n ) O(m * n) O(mn)
最新回复(0)