建酒店网站,dw网页制做教程,网站建设基本代码,软件开发工程师报考条件暴力解法#xff1a;直接按照题目所示在矩阵的相应位置加一
时间复杂度#xff1a;O(n2 * queries.length)
空间复杂度#xff1a;O(1)
二维差分#xff1a;创建二维差分数组#xff0c;通过对差分数组的修改来影响原来的数组#xff0c;最后还原
时间复杂度#x…
暴力解法直接按照题目所示在矩阵的相应位置加一
时间复杂度O(n2 * queries.length)
空间复杂度O(1)
二维差分创建二维差分数组通过对差分数组的修改来影响原来的数组最后还原
时间复杂度O(n2 queries.length)
空间复杂度O(n2) 示例2此种情况会发生角标越界的情况因此差分数组需要多初始化2行2列 代码
import org.junit.Test;public class SubmatrixPlus {Testpublic void test() {int[][] queries new int[][]{{1, 1, 2, 2}, {0, 0, 1, 1}};for (int[] query : submatrixPlus(queries, 3)) {for (int n : query) {System.out.print(n );}System.out.println();}int[][] queries1 new int[][]{{0, 0, 1, 1}};for (int[] query : submatrixPlus(queries1, 2)) {for (int n : query) {System.out.print(n );}System.out.println();}}//int[][] querries {{左上角行左上角列右下角行右下角列}{左上角行左上角列右下角行右下角列}}public static int[][] submatrixPlus(int[][] queries, int n) {// 构建差分数组,多初始化2行2列避免数组越界int[][] arr new int[n][n];for (int i 0; i queries.length; i) {arr[queries[i][0] 1][queries[i][1] 1];//第几行不等于数组的索引arr[queries[i][2] 2][queries[i][1] 1]--;arr[queries[i][0] 1][queries[i][3] 2]--;arr[queries[i][2] 2][queries[i][3] 2];}//还原数组int[][] res new int[n 2][n 2];for (int i 0; i res.length; i) {for (int j 0; j res[i].length; j) {arr[i 1][j 1] arr[i 1][j 1] arr[i 1][j] arr[i][j 1] - arr[i][j];res[i][j] arr[i 1][j 1];}}return res;}
}