lc2536.子矩阵元素加1

**暴力解法:**直接按照题目所示在矩阵的相应位置加一

时间复杂度:O(n 2 * queries.length)

空间复杂度:O(1)

**二维差分:**创建二维差分数组,通过对差分数组的修改来影响原来的数组,最后还原

时间复杂度:O(n 2 + queries.length)

空间复杂度:O(n 2 )

示例2此种情况会发生角标越界的情况,因此差分数组需要多初始化2行2列

代码

复制代码
import org.junit.Test;

public class SubmatrixPlus {

    @Test
    public 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;

    }
}
相关推荐
~|Bernard|1 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师1 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo31 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
阿巴Jun2 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
好家伙VCC2 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
liulilittle4 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
bkspiderx5 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
中华小当家呐6 小时前
算法之常见八大排序
数据结构·算法·排序算法
沐怡旸7 小时前
【算法--链表】114.二叉树展开为链表--通俗讲解
算法·面试
一只懒洋洋7 小时前
K-meas 聚类、KNN算法、决策树、随机森林
算法·决策树·聚类