为有牺牲多壮志,敢教日月换新天。

[Swift]LeetCode598. 范围求和 II | Range Addition II

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10450437.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

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.

给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。

操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。

在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。

示例 1:

输入: 
m = 3, n = 3
operations = [[2,2],[3,3]]
输出: 4
解释: 
初始状态, M = 
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

执行完操作 [2,2] 后, M = 
[[1, 1, 0],
 [1, 1, 0],
 [0, 0, 0]]

执行完操作 [3,3] 后, M = 
[[2, 2, 1],
 [2, 2, 1],
 [1, 1, 1]]

M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。

注意:

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

Runtime: 44 ms
Memory Usage: 19.1 MB
 1 class Solution {
 2     func maxCount(_ m: Int, _ n: Int, _ ops: [[Int]]) -> Int {
 3         var m = m
 4         var n = n
 5         for op in ops
 6         {
 7             m = min(m, op[0])
 8             n = min(n, op[1])
 9         }
10         return m * n
11     }
12 }

56ms

 1 class Solution {
 2     func maxCount(_ m: Int, _ n: Int, _ ops: [[Int]]) -> Int {        
 3         var minX = m
 4         var minY = n
 5         for operation in ops where operation[0] > 0 && operation[1] > 0 {
 6             minX = min(minX, operation[0])
 7             minY = min(minY, operation[1])
 8         }
 9         
10         return minX * minY
11     }
12 }

116ms

 1 class Solution {
 2     func maxCount(_ m: Int, _ n: Int, _ ops: [[Int]]) -> Int {
 3         guard !ops.isEmpty else {
 4             return m * n
 5         }
 6         
 7         var a = Int.max
 8         var b = Int.max
 9         for op in ops {
10             a = min(op.first!, a)
11             b = min(op.last!, b)
12         }
13         
14         return a * b
15     }
16 }

 

posted @ 2019-02-28 14:58  为敢技术  阅读(265)  评论(0编辑  收藏  举报