LeetCode 598. Range Addition II

来源:互联网 发布:如何清空手机数据 编辑:程序博客网 时间:2024/05/29 20:00

598. Range Addition II

Descripition

Given an m * n 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:Input: m = 3, n = 3operations = [[2,2],[3,3]]Output: 4Explanation: 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 return 4.

Solution

  • 题意即给一个初始化的数组(均为零),以及一些二元组,要求将二元组范围内的(见题目描述)数加一。最终返回最大数的数目。
  • 分析题目,我们可以发现,不论二元组是什么,总是从(0,0)开始累加,这就启发我们去找这些二元组的交集。交集内的数一定是最大数,我们可以获得二元组各个元素的最小值,结果便是这些最小值的乘积,代码如下。
class Solution {public:    long long maxCount(int m, int n, vector<vector<int>>& ops) {        if (ops.size() == 0) return m * n;    //如果未给出二元组,那么返回原始数组的大小,因为0就是最大值。        int min_row = ops[0][0],min_col = ops[0][1];        for (int i = 1;i < ops.size();i++) {            min_row = min(min_row,ops[i][0]);            min_col = min(min_col,ops[i][1]);        }        return min_row * min_col;    }};