当前位置: 首页 > news >正文

796. 子矩阵的和

Problem: 796. 子矩阵的和

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个二维前缀和的问题。二维前缀和的主要思想是预处理出一个二维数组,使得每个位置(i, j)上的值表示原数组中从(0, 0)到(i, j)形成的子矩阵中所有元素的和。这样,对于任意的子矩阵(x1, y1)到(x2, y2),我们可以通过四个前缀和的值快速计算出其和。

解题方法

1.首先,我们需要读入矩阵的大小和矩阵的元素值。
2.然后,我们计算二维前缀和。对于每个位置(i, j),其前缀和的值等于其上方元素的前缀和加上其左方元素的前缀和,再减去其左上方元素的前缀和,最后加上其自身的值。
3.最后,对于每个查询,我们可以通过四个前缀和的值快速计算出子矩阵的和。

复杂度

时间复杂度:

预处理的时间复杂度为 O ( n ∗ m ) O(n*m) O(nm),其中 n n n m m m分别为矩阵的行数和列数。
每次查询的时间复杂度为 O ( 1 ) O(1) O(1)

空间复杂度:

我们需要额外的 O ( n ∗ m ) O(n*m) O(nm)的空间来存储前缀和。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int n, m, q;static int MAXN = 1001;static int MAXM = 1001;static int[][] arr = new int[MAXN][MAXM];public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();q = nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {arr[i][j] = nextInt();}}for (int i = 1; i <= n; i++) {arr[i][0] += arr[i - 1][0];}for (int j = 1; j <= m; j++) {arr[0][j] += arr[0][j - 1];}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {arr[i][j] += arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1];}}while (q-- > 0) {int x1 = nextInt();int y1 = nextInt();int x2 = nextInt();int y2 = nextInt();out.println(arr[x2][y2] - arr[x2][y1 - 1] - arr[x1 - 1][y2] + arr[x1 - 1][y1 - 1]);}out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}
http://www.lryc.cn/news/299301.html

相关文章:

  • 如何在 Python 中处理 Unicode
  • CSDN文章导出PDF整理状况一览
  • jmeter-05变量(用户定义变量,用户参数,csv文档参数化)
  • CSS之水平垂直居中
  • 2.8日学习打卡----初学RabbitMQ(三)
  • Unity学习笔记(零基础到就业)|Chapter02:C#基础
  • 容器化的基础概念:不可变基础设施解释:将服务器视为乐高积木,而非橡皮泥。
  • 智胜未来,新时代IT技术人风口攻略-第二版(弃稿)
  • Git分支和迭代流程
  • 数据库管理-第150期 Oracle Vector DB AI-02(20240212)
  • MySQL双写机制
  • uniapp的配置和使用
  • 【ES】--Elasticsearch的分词器深度研究
  • 【Langchain Agent研究】SalesGPT项目介绍(三)
  • Java安全 URLDNS链分析
  • 【网站项目】026校园美食交流系统
  • 使用raw.gitmirror.com替换raw.githubusercontent.com以解决brew upgrade python@3.12慢的问题
  • 深度学习的进展
  • [高性能] - 缓存架构
  • django实现外键
  • 飞天使-k8s知识点14-kubernetes散装知识点3-Service与Ingress服务发现控制器
  • 任务调度
  • 深刻反思现代化进程:20世纪与21世纪的比较分析及东西方思想家的贡献
  • 【FTP讲解】
  • java面试题整理
  • 探索NLP中的N-grams:理解,应用与优化
  • JAVA-数组乱序
  • Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻
  • Java开发四则运算-使用递归和解释器模式
  • [NSSCTF]-Web:[SWPUCTF 2021 新生赛]easyrce解析