598.区间加法II

目标

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。

在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。

示例 1:

输入: m = 3, n = 3,ops = [[2,2],[3,3]]
输出: 4
解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。

示例 2:

输入: m = 3, n = 3, ops = [[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3]]
输出: 4

示例 3:

输入: m = 3, n = 3, ops = []
输出: 9

说明:

  • 1 <= m, n <= 4 * 10^4
  • 0 <= ops.length <= 10^4
  • ops[i].length == 2
  • 1 <= ai <= m
  • 1 <= bi <= n

思路

有一个 m x n 矩阵,其所有元素初值为0。另有一个二维数组 ops,每一个操作 ops[i] = [ai, bi] 表示将矩阵中 x ∈ [0, ai], y ∈ [0, bi] 的元素加 1。求执行完所有操作后,矩阵中最大元素的个数。

这其实是一个脑筋急转弯,就是求操作数组中 x 与 y 的最小值,[0, 0][x, y] 的矩阵是所有操作都重合的,所以元素值最大,其个数为 x * y。注意考虑操作为空的情况,这时返回 m * n,所有元素均为 0

代码


/**
 * @author jd95288
 * @date 2025-02-02 1:23
 */
public class MaxCount598 {

    public int maxCount(int m, int n, int[][] ops) {
        int x = m;
        int y = n;
        for (int[] op : ops) {
            x = Math.min(x, op[0]);
            y = Math.min(y, op[1]);
        }
        return x * y;
    }

}

性能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注