【算法】一维前缀和以及二维前缀和

目录

  • 一维前缀和
    • 适用场景
    • 示例
  • 二维前缀和
    • 适用场景
    • 一种情况
    • 另一种情况
    • 示例

一维前缀和

适用场景

  • 求一段区间的和

比如有一个数列 :
在这里插入图片描述
如果我们要求 [l,r]即某个区间内的数组和的时候,思路就是每遍历一个元素就进行求和,记录下加到al时的和值以及加到ar时的和值,两个值相减就得到区间和了。

这时求一次和的情况,时间复杂度是O(n),那如果要进行多次区间求和,每次都要进行一次这样的操作,那么n次的时间复杂度就是O(n * n)。

为了避免出现上面的情况,我们以空间换时间,在每次进行求和的时候将和值记录下来,也就是说我们会另外构造一个数组,这个数组就是前缀和数组。这样我们只需遍历一次数组,在需要求区间和的时候直接从前缀和数组中取出相应的值进行减法就可以了。

示例

在这里插入图片描述
java参考代码:

package org.example;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //序列长度int m = sc.nextInt(); //询问次数int[] nums = new int[n]; //序列数组int[] sums = new int[n]; //前缀和数组//构造序列数组的同时构造前缀和数组for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();//构造前缀和数组if (i == 0) {sums[i] = nums[i];} else {sums[i] = sums[i - 1] + nums[i];}}while ( m-- > 0) {int l = sc.nextInt();int r = sc.nextInt();System.out.println("区间和:" + (sums[r] - sums[l]));}}
}

二维前缀和

适用场景

  • 求一个矩阵中任意子矩阵的数之和

一种情况

如果要求一个i*j(i行j列)的子矩阵的数之和,如图:
在这里插入图片描述

  1. 先求i * (j - 1)子矩阵的数之和,如图:
    在这里插入图片描述
  2. 再求(i - 1) * j 子矩阵的数之和,如图:
    在这里插入图片描述
  3. 将以上两值相加后再加上第i行第j列那个元素
  4. 最后一步去重,如图,灰色区域在前面两步加了两次,所以减去,重复的部分是(i - 1) * (j - 1)子矩阵
    在这里插入图片描述
    最后的公式就是:
    在这里插入图片描述

另一种情况

我们要求的子矩阵是中间的,如下图,我们要求黄色框子矩阵的数之和:
和前面的思路差不多。上面是要去重,下面这种情况则需要加上重复删除的部分。
在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述
java参考代码:

package org.example;import javax.sound.midi.Soundbank;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //n行int m = sc.nextInt(); //m列int q = sc.nextInt(); //询问q次int[][] a = new int[n + 1][m + 1];  //构造矩阵int[][] s = new int[n + 1][m + 1];  //构造二维前缀和//构造矩阵和二维前缀和for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = sc.nextInt();s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - s[i - 1][j - 1];}}while (q-- > 0) {int x1 = sc.nextInt();int y1 = sc.nextInt();int x2 = sc.nextInt();int y2 = sc.nextInt();System.out.println("子矩阵和:" + (s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]));}}
}

在这里插入图片描述

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

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

相关文章

Skywalking

1、简介 Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目&#xff0c; 目前SkyWalking支持Java、 .Net、 …

广告主投放系统从设计到实践

在当今数字广告行业中&#xff0c;广告主投放系统扮演着至关重要的角色。它是连接广告主和广告媒体之间的桥梁&#xff0c;帮助广告主实现广告投放目标并获得可观的回报。本篇博客文章将深入探讨广告主投放系统的设计和实践过程&#xff0c;并分享一些关键的经验和最佳实践。 …

flink的分组聚合、over聚合、窗口聚合对比

【背景】 flink有几种聚合&#xff0c;使用上是有一些不同&#xff0c;需要加以区分&#xff1a; 分组聚合&#xff1a;group agg over聚合&#xff1a;over agg 窗口聚合&#xff1a;window agg 省流版&#xff1a; 触发计算时机 结果流类型 状态大小 分组聚合group ag…

使用OpenCV实现两张图像融合在一起

简单介绍 图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据&#xff0c;以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法&a…

基与HTML5的塔防游戏设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 项目背景与相关技术 3 1.1 背景与发展简介 3 1.2 HTML5技术及其优势 4 1.3 JavaScript开发的优势与劣势 4 1.4 CSS样式表在开发中的用处 5 1.5 本章小结 6 2 系统分析 7 2.1 需求分析 7 2.2 问题分析 7 2.3 流程设计 7 2.3 功能分析 8 2.…

数据分析入门,深入浅出的数据分析

时下正值大数据与人工智能高速发展的时刻&#xff0c;相信很多对数据分析感兴趣的朋友想要转行。很多朋友选择从事数据分析&#xff0c;主要是看到这个岗位的发展前景和薪资待遇。 但是一些小伙伴并不知道数据分析到底是做什么的&#xff1f;需要用到哪些知识&#xff1f; 为…

【Flink SQL】Flink SQL 基础概念:SQL Table 运行环境、基本概念及常用 API

Flink SQL 基础概念&#xff1a;SQL & Table 运行环境、基本概念及常用 API 1.SQL & Table 简介及运行环境1.1 简介1.2 SQL 和 Table API 运行环境依赖 2.SQL & Table 的基本概念及常用 API2.1 一个 SQL / Table API 任务的代码结构2.2 SQL 上下文&#xff1a;Tabl…

linux部署服务相关基础操作:磁盘挂载、jdk安装、docker安装、docker-compose环境安装、mysql、redis、jenkins等

磁盘挂载 1、运行mount查看数据盘挂载信息。返回结果中没有/dev/vdb1的信息。 2、运行fdisk -l查看数据盘分区信息。 3、格式化磁盘 mkfs -t ext4 /dev/vdb3.1、 (格式化后这一步跳过)运行cat /etc/fstab查看数据盘分区/dev/vdb1原有的挂载点名称。 4、运行mkdir /data重新…

[python3] 责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。请求沿着链传递&#xff0c;直到有一个对象处理它为止。 下面是一个简单的 Pyth…

Linux---多线程(上)

一、线程概念 线程是比进程更加轻量化的一种执行流 / 线程是在进程内部执行的一种执行流线程是CPU调度的基本单位&#xff0c;进程是承担系统资源的基本实体 在说线程之前我们来回顾一下进程的创建过程&#xff0c;如下图 那么以进程为参考&#xff0c;我们该如何去设计创建一个…

paddle的版面分析的环境搭建及使用

一、什么是版面分析 版面分析技术&#xff0c;主要是对图片形式的文档进行版面分析&#xff0c;将文档划分为文字、标题、表格、图片以及列表5类区域&#xff0c;如下图所示&#xff1a; 二、应用场景 2.1 合同比对 2.2 文本类型划分 2.3 通用文档的还原 版面分析技术可将以…

论文阅读FCN-Transformer Feature Fusion for PolypSegmentation

本文提出了一种名为Fully Convolutional Branch-TransFormer (FCBFormer)的图像分割框架。该架构旨在结合Transformer和全卷积网络&#xff08;FCN&#xff09;的优势&#xff0c;以提高结肠镜图像中息肉的检测和分类准确性。 1&#xff0c;框架结构&#xff1a; 模型采用双分…

【Python】牛客网—软件开发-Python专项练习

专栏文章索引&#xff1a;Python 1.&#xff08;单选&#xff09;下面哪个是Python中不可变的数据结构&#xff1f; A.set B.list C.tuple D.dict 可变数据类型&#xff1a;列表list[ ]、字典dict{ }、集合set{ }(能查询&#xff0c;也可更改)数据发生改…

Golang 开发实战day03 - Arrays Slices

Golang 教程03 - Arrays&#xff0c;Slices Go语言中的数组和切片都是用于存储数据的类型&#xff0c;但它们之间存在一些重要的区别。了解这些区别对于有效地使用它们至关重要。 1. Arrays 数组 1.1 定义 数组是一种固定大小的数据结构&#xff0c;用于存储相同类型的值。…

广西省行政村边界shp数据/广西省乡镇边界/广西省土地利用分类数据/径流分布

广西壮族自治区&#xff0c;地处中国南部&#xff0c;北回归线横贯中部。南北以贺州——东兰一线为界&#xff0c;此界以北属中亚热带季风&#xff0c;以南属南亚热带季风。 数据范围&#xff1a;全国行政区划-行政村界 数据类型&#xff1a;面状数据&#xff0c;全国各省市县…

1月笔记本电脑行业分析:多品牌下滑但ThinkPad逆势增长!

2024年1月&#xff0c;笔记本行业市场格局出现较大的变化。长期在京东平台保持头部联想和惠普&#xff0c;被ThinkPad挤下&#xff08;虽然是联想旗下品牌&#xff09;&#xff0c;排名掉至第二和第三。ThinkPad以超2.7亿的月销售额成绩拿下第一&#xff0c;市占比16%。 与去年…

PHP使用 enqueue/amqp-lib拓展实现rabbitmq任务处理

一&#xff1a;拓展安装 composer require enqueue/amqp-lib 文档地址&#xff1a;https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md 二&#xff1a;方法介绍 1&#xff1a;连接rabbitmq $factory new AmqpConnectionFactory([host &…

java SSM农产品订购网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM农产品订购网站系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

如何在 Unity 中创建简单的多人游戏

在本文中,我将向你展示如何将 Mirror 添加到 Unity 项目中,并创建一个简单的多人游戏。你还可以从 GitHub下载项目文件。Mirror 是一个网络库,可让你在 Unity 中轻松创建多人游戏。它是免费的、开源的,实际上是 UNET(Unity 自己已弃用的网络 API)的一个分支。 游戏 每个…

算法-贪心-112. 雷达设备

题目 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为 d&#xff0c;当小岛与某雷达的距离不超过 d 时&#xff0c;该小岛可以被雷达覆…