598. 范围求和 II
生活随笔
收集整理的這篇文章主要介紹了
598. 范围求和 II
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
598. 范圍求和 II
給定一個(gè)初始元素全部為?0,大小為 m*n 的矩陣?M?以及在?M?上的一系列更新操作。
操作用二維數(shù)組表示,其中的每個(gè)操作用一個(gè)含有兩個(gè)正整數(shù)?a 和 b 的數(shù)組表示,含義是將所有符合?0 <= i < a 以及 0 <= j < b 的元素?M[i][j]?的值都增加 1。
在執(zhí)行給定的一系列操作后,你需要返回矩陣中含有最大整數(shù)的元素個(gè)數(shù)。
示例 1:輸入: m = 3, n = 3 operations = [[2,2],[3,3]] 輸出: 4 解釋: 初始狀態(tài), M = [[0, 0, 0],[0, 0, 0],[0, 0, 0]]執(zhí)行完操作 [2,2] 后, M = [[1, 1, 0],[1, 1, 0],[0, 0, 0]]執(zhí)行完操作 [3,3] 后, M = [[2, 2, 1],[2, 2, 1],[1, 1, 1]]M 中最大的整數(shù)是 2, 而且 M 中有4個(gè)值為2的元素。因此返回 4。注意:
- m 和 n 的范圍是?[1,40000]。
- a 的范圍是 [1,m],b 的范圍是 [1,n]。
- 操作數(shù)目不超過 10000。
解題思路
因?yàn)槊總€(gè)操作是將所有符合?0 <= i < a 以及 0 <= j < b 的元素?M[i][j]?的值都增加 1。
因此,對(duì)于每個(gè)操作我們可以看成是在原矩陣M的基礎(chǔ)上覆蓋一層矩陣,并且所有覆蓋矩陣都是從原矩陣的左上角開始覆蓋的,而矩陣中含有最大整數(shù)的元素個(gè)數(shù),可以看成是矩陣M被覆蓋次數(shù)最多的那個(gè)部分,因此,我們只需要取出每個(gè)操作中最小的正整數(shù)a和b,就是被覆蓋次數(shù)最多的那個(gè)部分,他們的面積就算最大整數(shù)的元素個(gè)數(shù)。
代碼
class Solution { public:int maxCount(int m, int n, vector<vector<int>>& ops) {if (ops.size()==0) return m*n;int l(0x7fffffff),r(0x7fffffff);for (auto op:ops){l=min(op[0],l);r=min(op[1],r);}return l*r;} };復(fù)雜度分析
- 時(shí)間復(fù)雜度:O(k),其中?k?是數(shù)組?ops\textit{ops}ops?的長度。
- 空間復(fù)雜度:O(1)。
總結(jié)
以上是生活随笔為你收集整理的598. 范围求和 II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到吃黄杏子是什么意思
- 下一篇: 299. 猜数字游戏