598. 范围求和 II『简单』

题目来源于力扣(LeetCode

一、题目

598. 范围求和 II

题目相关标签:数学

提示:

  1. m 和 n 的范围是 [1,40000]。
  2. a 的范围是 [1,m],b 的范围是 [1,n]。
  3. 操作数目不超过 10000。

二、解题思路

  1. 据题意:每次进行 ops 数组的操作时,都会从 m 和 n 组成的二维数组最前面的元素开始加 1

  2. ops 长度为 0 时,不需要进行操作,则最大整数(数组默认值 0)的元素个数为 m * n

  3. 那么需要返回矩阵中含有最大整数的元素个数,即需要找到 ops 数组中最小的 m 和 n

  4. 此时最小的 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);
}
posted @ 2020-05-23 20:47  知音12138  阅读(196)  评论(0编辑  收藏  举报