zoukankan      html  css  js  c++  java
  • LeetCode 598. Range Addition II (范围加法之二)

      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 1:

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

    Note:

    1. The range of m and n is [1,40000].
    2. The range of a is [1,m], and the range of b is [1,n].
    3. The range of operations size won't exceed 10,000.

    题目标签:Math

      这道题目给了我们一个 m*n 的matrix, 起初都是0, 根据operation给其中一部分区域加1。最后要return 最大值integer的个数。

    我们可以从另一个角度出发,把这个题目转化成图形来理解,最大的值的区域就是所有operation的交集。如何找到这个区域呢,我们需要记录一个min x 和min y 来求出交集的区域 = x*y, 相当于在求面积。

    举两个例子来看一下:

    Example 1:

      maxCount(3,3,[ [1,2], [2,1] ])

           0  0  0                                     1  1  0                                     2  1  0  

           0  0  0     [1,2]  ->                    0  0  0     [2,1]  ->                    1  0  0      return 1;

           0  0  0                                     0  0  0                                     0  0  0

      最小的 x = 1, 最小的 y = 1, 所以最小的交集是 0,0 这个坐标, 它的区域 =  1 * 1。

    Example 2:

      maxCount(3,3,[ [1,3], [2,2] ])

           0  0  0                                     1  1  1                                     2  2  1  

           0  0  0     [1,3]  ->                    0  0  0     [2,2]  ->                    1  1  0      return 2;

           0  0  0                                     0  0  0                                     0  0  0

      最小的 x = 1, 最小的 y = 2, 所以最小的交集是 0,0 和 0,1 这两个坐标, 它的区域 =  1 * 2。

      

    Java Solution:

    Runtime beats 77.83% 

    完成日期:06/17/2017

    关键词:math: matrix

    关键点:找到重叠的区域

     1 class Solution 
     2 {
     3     public int maxCount(int m, int n, int[][] ops) 
     4     {
     5         int minRow = m;
     6         int minCol = n;
     7         
     8         for(int[] op : ops)
     9         {
    10             minRow = Math.min(minRow, op[0]);
    11             minCol = Math.min(minCol, op[1]);
    12         }
    13         
    14         return minRow * minCol;
    15     }
    16 }

    参考资料:n/a

    LeetCode 题目列表 - LeetCode Questions List

    题目来源:https://leetcode.com/

  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7072464.html
Copyright © 2011-2022 走看看