做外貿(mào)經(jīng)常用的網(wǎng)站腦白金網(wǎng)絡(luò)營銷
2536.?子矩陣元素加 1
給你一個(gè)正整數(shù)?n
?,表示最初有一個(gè)?n x n
?、下標(biāo)從?0?開始的整數(shù)矩陣?mat
?,矩陣中填滿了 0 。
另給你一個(gè)二維整數(shù)數(shù)組?query
?。針對(duì)每個(gè)查詢?query[i] = [row1i, col1i, row2i, col2i]
?,請(qǐng)你執(zhí)行下述操作:
- 找出?左上角?為?
(row1i, col1i)
?且?右下角?為?(row2i, col2i)
?的子矩陣,將子矩陣中的?每個(gè)元素?加?1
?。也就是給所有滿足?row1i <= x <= row2i
?和?col1i <= y <= col2i
?的?mat[x][y]
?加?1
?。
返回執(zhí)行完所有操作后得到的矩陣?mat
?。
示例 1:
輸入:n = 3, queries = [[1,1,2,2],[0,0,1,1]] 輸出:[[1,1,0],[1,2,1],[0,1,1]] 解釋:上圖所展示的分別是:初始矩陣、執(zhí)行完第一個(gè)操作后的矩陣、執(zhí)行完第二個(gè)操作后的矩陣。 - 第一個(gè)操作:將左上角為 (1, 1) 且右下角為 (2, 2) 的子矩陣中的每個(gè)元素加 1 。 - 第二個(gè)操作:將左上角為 (0, 0) 且右下角為 (1, 1) 的子矩陣中的每個(gè)元素加 1 。
二維差分,聽著比一維差分多一維,但實(shí)際上做起來還是套用一維的做法,實(shí)際操作和中心思想沒有太大變化。
我做的時(shí)候?qū)⑺械膯瘟锌醋饕粋€(gè)一維數(shù)組,如果該數(shù)組中有部分被包在目標(biāo)數(shù)組中,則將頭加一,尾部后一位減一,得出該數(shù)組的差分?jǐn)?shù)組,最后將二維數(shù)組豎向求前綴和即可。
public static int[][] rangeAddQueries(int n, int[][] queries) {int[][] nums = new int[n][n];for (int[] query:queries){for (int i=query[1];i<=query[3];i++){nums[query[0]][i]++;}if(query[2]<n-1){for (int i=query[1];i<=query[3];i++){nums[query[2]+1][i]--;}}}for (int i=0;i<n;i++){for (int j=1;j<n;j++){nums[j][i]+=nums[j-1][i];}}return nums;}