二维差分数组的概念

前面介绍了一维差分数组的用法及案例,
差分数组概念及基础用例1
差分数组用例2
下面介绍一下二维差分数组的概念。

构造二维差分数组:

  • 创建与原始矩阵相同大小的差分数组
  • 第一行和第一列就是类似一维差分数组的写法,后 - 前
  • 剩下的就是减去差分数组中前面和上面的值,然后加上左上角的值,因为前面和上面都减去了左上角的值,相当于减了两遍,而我们只需要减去一遍即可。

根据二维差分数组还原出原始数组

  • 创建与差分数组相同大小的原始矩阵
  • 第一行和第一列就是类似一维差分数组的写法,累加
  • 剩下的就是加上差分数组中前面和上面的值,然后减去左上角的值
function constructDifferenceMatrix(matrix) {const n = matrix.length;const m = matrix[0].length;// 创建与原始矩阵相同大小的差分数组const diff = new Array(n);for (let i = 0; i < n; i++) {diff[i] = new Array(m).fill(0);}// 构建差分数组for (let i = 0; i < n; i++) {for (let j = 0; j < m; j++) {// 差分数组元素表示原始矩阵相邻元素之差diff[i][j] = matrix[i][j];if (i > 0) {diff[i][j] -= matrix[i - 1][j];}if (j > 0) {diff[i][j] -= matrix[i][j - 1];}if (i > 0 && j > 0) {diff[i][j] += matrix[i - 1][j - 1];}}}return diff;
}function restoreMatrix(diff) {const n = diff.length;const m = diff[0].length;// 创建与差分数组相同大小的原始矩阵const matrix = new Array(n);for (let i = 0; i < n; i++) {matrix[i] = new Array(m).fill(0);}// 还原原始矩阵for (let i = 0; i < n; i++) {for (let j = 0; j < m; j++) {matrix[i][j] = diff[i][j];if (i > 0) {matrix[i][j] += matrix[i - 1][j];}if (j > 0) {matrix[i][j] += matrix[i][j - 1];}if (i > 0 && j > 0) {matrix[i][j] -= matrix[i - 1][j - 1];}}}return matrix;
}// 创建二维矩阵
const matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9],
];// 构建差分数组
const diff = constructDifferenceMatrix(matrix);
console.log("差分数组:", diff);// 还原为原始矩阵
const matrix1 = restoreMatrix(diff);
console.log(matrix1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

easyexcle 导出csv

导入jar <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version></dependency>代码 private static List<List<String>> head() {List<List<String>&g…

Linux cp命令(cp指令)解析

文章目录 Linux cp命令解析基本语法常用参数-i (交互式复制)-r 或 -R (递归复制)-v (详细输出)-p (保留文件属性) 高级应用复制多个文件到一个目录使用通配符复制多个文件 进阶讲解 Linux cp命令解析 Linux操作系统中&#xff0c;cp是一个非常实用且常见的命令&#xff0c;它的…

量化交易学习4(投资组合基本认识)

1 如何衡量投资组合的收益率 1.1 投资组合收益率的计算方法 1.2 投资组合的绝对收益率和相对收益率 2 如何衡量投资组合的风险 2.1 风险的定义 风险是指在未来可能发生的不确定性事件所带来的潜在损失。 在投资领域中&#xff0c;风险通常指投资所面临的不确定性和潜在的损失…

自学Python第二十二天- Django框架(六) django的实用插件:cron、APScheduler

django-crontab 和 django-cron 有时候需要django在后台不断的执行一个任务&#xff0c;简单的可以通过中间件来实现&#xff0c;但是中间件是根据请求触发的。如果需要定时执行任务&#xff0c;则需要使用到一些插件。 django-crontab 和 django-cron 是常用的用于处理定时任…

hive表加字段

目录 1.给表添加字段2.为什么使用cascade3.使用场景 1.给表添加字段 alter table database.tablename add columns(字段名 字段类型 comment 字段中文含义) cascade;2.为什么使用cascade 在Hive中&#xff0c;当你想要修改表结构&#xff0c;例如添加字段时&#xff0c;可能会…

群晖NAS开启FTP服务结合内网穿透实现公网远程访问本地服务

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP…

【优先级队列(大顶堆 小顶堆)】【遍历哈希表键值对】Leetcode 347 前K个高频元素

【优先级队列&#xff08;大顶堆 小顶堆&#xff09;】【排序】Leetcode 347 前K个高频元素 1.不同排序法归纳2.大顶堆和小顶堆3.PriorityQueue操作4.PriorityQueue的升序&#xff08;默认&#xff09;与降序5.问题解决&#xff1a;找前K个最大的元素 &#xff1a;踢走最小的&…

HashCat 恢复Excel、Word、PPT密码保姆教程

HashCat 恢复Excel、Word、PPT密码 一、流程 整体需要两个步骤 先用office2john.py获取下文件的hash值 python office2john.py 1.xlsx > hash这个命令需要你电脑有python环境&#xff0c;然后在cmd命令窗口中执行此命令就行 文件链接&#xff1a;https://github.com/magnu…

Python 轻量级定时任务调度:APScheduler

简述 APscheduler (Advanced Python Scheduler)&#xff0c;作用为按指定的时间规则执行指定的作业。提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。该框架不仅可以添加、删除定时任务&#xff0c;还可以将任务存储到数据库…

Linux内核编译-ARM

步骤一、下载源码及交叉编译器后解压 linux kernel官网 ARM GCC交叉编译器 步骤二、安装软件 sudo apt-get install ncurses-dev sudo apt-get install flex sudo apt-get install bison sudo apt install libgtk2.0-dev libglib2.0-dev libglade2-dev sudo apt install libs…

数据湖Paimon入门指南

一、主键表&#xff08;Primary Key Table&#xff09; Merge Engines sink-upsert-realize可能会导致不正常的现象。当输入乱序时&#xff0c;我们建议您使用序列字段来纠正无序。建议设置为None set table.exec.sink.upsert-materialize NONE Deduplicate&#xff08…

ArrayList和LinkedList的区别是什么

ArrayList 和 LinkedList 分别代表了两类不同的数据结构&#xff1a;动态数组和链表。它们都实现了 Java 的 List 接口&#xff0c;但是有着各自独特的特点和性能表现。 1. 数据结构 ArrayList 是基于可调整大小的数组实现的。它允许快速随机访问&#xff0c;因为内部元素可通…

使用useRoutes提示invalid hook call

包版本&#xff1a; 问题&#xff1a; 今天用vitereactts重新搭建项目时报错 代码&#xff1a; router.tsx import { useRoutes } from react-router-dom; import Home from "../pages/home/index";const routers[{path: /,element: <Home/> } ] // const…

c++ 语法 运算符重载

不要滥用运算符重载 内置类型不能使用运算符重载 号运算符重载 #include <iostream> #include "mathutil.hpp" #include <string> #include "People.hpp" #include "Phone.hpp" using namespace std; class Fclass{ public:int…

jmeter设置关联

一、为什么要设置关联&#xff1f; http协议本身是无状态的&#xff0c;客户端只需要简单向服务器请求下载某些文件&#xff0c;无论是客户端还是服务端都不去记录彼此过去的行为&#xff0c;每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本&#xff0c;就必须设置…

机器学习本科课程 实验4 支持向量机

第一题&#xff1a;支持向量机的核函数 实验内容&#xff1a; 了解核函数对SVM的影响绘制不同核函数的决策函数图像简述引入核函数的目的 1. 导入模型 import numpy as np import matplotlib.pyplot as plt %matplotlib inline from matplotlib.colors import ListedColorm…

【LeetCode: 292. Nim 游戏+ 博弈问题】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

vue绘制语音波形图---wavesurfer.js

文章目录 创建实例optionsmethod接收Blob流 https://wavesurfer.xyz/ 创建实例 引入插件&#xff1a;import WaveSurfer from "wavesurfer.js"创建实例对象&#xff1a;this.wavesurfer WaveSurfer.create(options); <div id"waveform"><!-- t…

MySQL 小技巧:xtrabackup 软件包的下载及安装

案例&#xff1a;xtrabackup 软件包的下载及安装 软件包下载&#xff1a;Index of /percona/centos/7/RPMS/x86_64/ CentOS7 默认的数据库版本比较老,因此建议使用 xtrabackup 2.4 版本 // CentOS7 默认的数据库版本比较老,因此建议使用 xtrabackup 2.4 版本 // 安装 CentOS7 默…

性能评测|虚拟化和裸金属 K8s 哪个性能更好?

本文重点 整体而言&#xff0c;SKS&#xff08;虚拟机 Kubernetes&#xff09;可以达到裸金属 Kubernetes 性能的 82% – 96%&#xff0c;满足绝大部分场景下生产容器应用的性能需求。更多虚拟化与裸金属 Kubernetes 架构、特性、适用场景与性能对比&#xff0c;欢迎阅读文末电…