题目来源于力扣(LeetCode)
一、题目
题目相关标签:数学
提示:
- m 和 n 的范围是 [1,40000]。
- a 的范围是 [1,m],b 的范围是 [1,n]。
- 操作数目不超过 10000。
二、解题思路
-
据题意:每次进行 ops 数组的操作时,都会从 m 和 n 组成的二维数组最前面的元素开始加 1
-
ops 长度为 0 时,不需要进行操作,则最大整数(数组默认值 0)的元素个数为 m * n
-
那么需要返回矩阵中含有最大整数的元素个数,即需要找到 ops 数组中最小的 m 和 n
-
此时最小的 m 和 n 组成的矩阵,其中的元素都是最大的整数,返回元素的个数:m * n
三、代码实现
public static int maxCount(int m, int n, int[][] ops) {
// ops 长度为零,即不需要操作时,此时数字 0 时出现最多的,返回 0 的个数 m * n 个
if (ops.length < 1) {
return m * n;
}
// 遍历 ops 数组
for (int i = 0; i < ops.length; i++) {
// 寻找 m 和 n 的最小值
m = m > ops[i][0] ? ops[i][0] : m;
n = n > ops[i][1] ? ops[i][1] : n;
}
// 最小的区域的数字是重复最多的
return m * n;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int m = 3, n = 3;
int[][] operations = {{2, 2}, {3, 3}}; // output:4
int result = maxCount(m, n, operations);
// System.out.println(Arrays.toString(result));
System.out.println(result);
}