[Swift]LeetCode598. 範圍求和 II | Range Addition II

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-gqhwvgfs-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given an m * n matrix M initialized with all 0's and several update operations.git

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.github

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

  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 上的一系列更新操做。code

操做用二維數組表示,其中的每一個操做用一個含有兩個正整數 a 和 b的數組表示,含義是將全部符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增長 1。orm

在執行給定的一系列操做後,你須要返回矩陣中含有最大整數的元素個數。htm

示例 1:blog

輸入: 
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 }
相關文章
相關標籤/搜索