码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • lintcode 1840 · 矩阵还原【中等 vip 二维前缀和数组】


    题目

    https://www.lintcode.com/problem/1840

    现有一个n行m列的矩阵
    before,对于before里的每一个元素
    before[i][j],我们会使用以下算法将其转化为
    after[i][j]。现给定after矩阵,请还原出原有的矩阵before。
    
    s = 0
    for i1: 0 -> i
        for j1: 0 -> j
            s = s + before[i1][j1]
    after[i][j] = s
    
    
    1≤n,m≤1000
    
    样例
    样例1:
    
    输入:
    2
    2
    [[1,3],[4,10]]
    输出: 
    [[1,2],[3,4]]
    解释:
    before:
    1 2
    3 4
    
    after:
    1 3
    4 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    前置知识

    前缀和数组
    二维数组前缀和数组
    
    • 1
    • 2

    参考答案

    public class Solution {
        /**
         * @param n: the row of the matrix
         * @param m: the column of the matrix
         * @param after: the matrix
         * @return: restore the matrix
         */
        public int[][] matrixRestoration(int n, int m, int[][] after) {
            /*
          after定义其实就是二维数组的前缀和
          after[i][j]=after[i-1][j]+after[i][j-1]+before[i][j]-after[i-1][j-1]
          可以推导处于before[i][j]的公式
          before[i][j]= after[i][j]-after[i-1][j]-after[i][j-1]+after[i-1][j-1]
           */
            int[][] before = new int[n][m];
            for (int i = 0; i <n ; i++) {
                for (int j = 0; j <m ; j++) {
                   int cur = after[i][j];
                    if(i> 0){
                        cur-= after[i-1][j];
                    }
                    if(j> 0){
                        cur -= after[i][j-1];
                    }
    
                    if(i>0 && j>0){
                        cur += after[i-1][j-1];
                    }
    
                    before[i][j] = cur;
                }
            }
    
            return before;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    C#的关于窗体的类库方案 - 开源研究系列文章
    【Linux入门】Linux环境配置
    研发效能的逻辑:填补软工鸿沟
    JavaScript面向对象和原型
    功能强大的开源网络监控工具:LibreNMS,牛逼!
    diamond原理
    【力扣 Hot100 | 第七天】4.22(找到字符串中所有字母异位词)
    uniapp:不同权限设置不同的tabBar
    9条消除if...else绝招,写出的代码效率更高了
    20220720学习反思
  • 原文地址:https://blog.csdn.net/weixin_37991016/article/details/132647396
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号