算法学习笔记(2)-前缀和

##前缀和

指的是某序列的前n项和,在数学上我们可以理解称为数列的前n项和。前缀和是一种预处理,用于降低查询的时间复杂度。

##一维前缀和

有一个一维数组x和该数组的前缀和数组y,则x和y具有以下关系:

#python代码示例

#关系:y0 = x0, y1 = x0 + x1, y2 = x0 + x1 + x2……
#python示例
for i,x in enumerate(x):
    if i == 0 :
        y[i] = x[i]
    else:
        y[i] = y[i-1] + x[i]
arr = [1,2,3,4,5]
sum = [0] * (5 + 6)
sum[0] = 0 
for i,x in enumerate(arr):
    sum[i] = arr[i - 1] + sum[i - 1]
for i,x in enumerate(sum):
    print("{}-{}".format(i,x))

#c++代码示例

#关系:y0 = x0, y1 = x0 + x1, y2 = x0 + x1 + x2……
#c++示例

for (int i = 0 ; i < n ; i++)

{

        if (i == 0)

        {

                y[i] = x[i] ;

        }

        else

        {

                y[i] = y[i-1] + x[i] ;

        }

}

#include<bits/stdc++.h>
using namespace std ;

int main()
{
    int arr[5] = {1,2,3,4,5} ;
    int sum[6] ;
    sum[0] = 0 ;
    for (int i = 1 ; i < 6 ; i++)
    {
        sum[i] = arr[i - 1] + sum[i - 1] ;
    }
    
    for (auto i : sum)
    {
        cout << i <<' ';
    }
    return 0 ;
}

 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com)

//c++代码示例
#include <iostream>
using namespace std;
int a[101010] ;
long long sum[101010] ;
int main() {
    int n,q;
    cin >> n >> q ;
    for (int i = 1 ; i <= n ; i++)
    {
        cin>>a[i],sum[i] = sum[i - 1] + a[i] ;
    }

    // int a, b;
    // while (cin >> a >> b) { // 注意 while 处理多个 case
        // cout << a + b << endl;
    // }
    while (q--)
    {
        int l,r ;
        cin >> l >> r ;
        cout << sum[r] - sum[l - 1] << endl;
    }
}
// 64 位输出请用 printf("%lld")
#python代码示例
import sys

# for line in sys.stdin:
#     a = line.split()
#     print(int(a[0]) + int(a[1]))


n, q = map(int, input().strip().split())
data = list(map(int, input().strip().split()))
pre = [0 for _ in range(n)]
pre[0] = data[0]
for i in range(1, n):
    pre[i] = pre[i - 1] + data[i]
for i in range(q):
    l, r = map(int, input().strip().split())
    res = pre[r - 1] - pre[l - 1] + data[l - 1]
    print(res)

##二维前缀和

有一个二维数组a和一个二维前缀和数组b,具有以下关系:
b(x),(y) = b(x-1),(y) + b(x),(y-1) + b(x-1),(y-1) + a(x),(y)

说白了每一个格子的值是从哪里得来的,只能从格子的上方和左方得到,但是在更新每个格子的值的时候,我们需要把第1列和第1行的特殊位置进行更新好,第一列的元素值只能从上方传递过来,第一行的元素只能从左边传递过来。

 

 ##改进,增加了冗余列和行

#python示例

for i in range(len(a)):
    for j in range(len(a[0])):
        if i == 0 and j == 0 :
            b[i][j] = a[i][j]
        if i == 0 : # 第一行
            b[i][j] = b[i][j-1] + a[i][j]
        if j == 0 : # 第一列
            b[i][j] = b[i-1][j] + a[i][j]
        if i != 0 and j != 0 :
            b[i][j] = b[i-1][j] + b[i][j-1] + b[i-1][j-1] + a[i][j]

【模板】二维前缀和_牛客题霸_牛客网 (nowcoder.com)

#pthon代码示例
while True:
    try:
        n, m, q = map(int, input().split())
        l = []
        for _ in range(n):
            l.append(list(map(int, input().split())))
        # dp[i][j]表示起点到l[i-1][j-1]的子矩阵的和
        dp = [[0 for i in range(m + 1)] for j in range(n + 1)]  # 让dp坐标与x1,y1,x2,y2,对齐 并且添加两个辅助列
        for i in range(1, n + 1):  # 行
            for j in range(1, m + 1):  # 列
                # 状态转移方程,dp[i][j]等于其上方所有行之和加上其左方所有列之和减去其左上方行列交叉导致的减掉双倍区域,再加上本单元格的值
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1] + l[i - 1][j - 1] - dp[i - 1][j - 1]
        print(dp)
        for k in range(q):
            x1, y1, x2, y2 = map(int, input().split())
            # (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和。x2,y2的值 减去 x1, y1上面的行左边的列,再加上重叠相减的部分
            num = dp[x2][y2] + dp[x1 - 1][y1 - 1] - dp[x1 - 1][y2] - dp[x2][y1 - 1]
            print(num)
    except:
        break
//c++代码示例
#include <iostream>
#include <vector>
using namespace std;

int main() {
    // int a, b;
    // while (cin >> a >> b) { // 注意 while 处理多个 case
    //     cout << a + b << endl;
    // }
    int n,m,q;
    cin>>n>>m>>q ;
    long long tmpv ;
    vector<vector<long long>> v(n+1,vector<long long>(m+1, 0));
    for (int i = 1; i <= n ; i++)
    {
        long long sum = 0 ;
        for (int j = 1 ; j <= m ; j++)
        {
            scanf("%ld",&tmpv) ;
            sum += tmpv ;
            v[i][j] = sum + (i > 1 ? v[i-1][j] : 0) ;
        }
    }
    for (int i = 0 ; i < q ; ++i)
    {
        int x1,y1,x2,y2 ;
        cin>>x1>>y1>>x2>>y2 ;
        cout<<v[x2][y2] - v[x1-1][y2] - v[x2][y1-1] + v[x1-1][y1-1]<<endl;

    }
    return 0 ;
}
// 64 位输出请用 printf("%lld")

 #c++代码示例

for (int i = 0 ; i < n ; i++)

{

        for (int j = 0 ; j < m ; j++)

        {

                if (i == 0 && j == 0)

                {

                        b[i][j] = a[i][j] ;

                }

                

                if (i == 0)

                {

                        b[i][j] = a[i][j - 1] + a[i][j];

                }

                

                if (j == 0)

                {

                        b[i][j] = a[i - 1][j] + a[i][j];

                }

                

                if (i != 0 && j != 0)

                {

                        b[i][j] = b[i-1][j] + b[i][j-1] + b[i-1][j-1] + a[i][j] ;

                }

        }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美国成立AI安全委员会:马斯克与扎克伯格被排除,权力游戏引热议!

2024年人工智能&#xff08;AI&#xff09;安全与监管的复杂性及其背后的权力、利益和道德问题&#xff0c;首先介绍了美国国土安全部成立的AI安全与安全委员会&#xff0c;以及两位人工智能领域巨头埃隆马斯克和马克扎克伯格被排除在外的现实&#xff0c;从权力和利益的角度分…

Vulnhub靶机随笔-Hacksudo_Aliens

Vulnhub靶机Hacksudo_Aliens详解 攻击机Kali IP:192.168.3.44 靶机 IP:未知 系统:未知 A.信息收集 扫描靶机存活性 确定IP地址 1.命令:arp-scan -l 扫描靶机开放端口及其服务版本信息 2.命令 nmap -A -p- -sV 靶机IP地址 靶机开放三个端口,22ssh端口,80web端…

Paper Digest | 基于原型学习的实体图谱预训练跨域推荐框架

欢迎大家在 GitHub 上 Star 我们&#xff1a; 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

【git】通过JetNrains IDE对git的操作

应该适用于所有jetbrains产品。 一、拉取(pull)代码 上方工具栏-Git-克隆。然后填写git地址与本地存放地址。 二、搁置 修改代码后搁置代码(不提交,但是也不撤销已修改的代码,把它暂存起来)。 界面的左上角。1->2->3。完事就可以写换到其他分支肆意妄为^^。 三…

Vue项目npm install certificate has expired报错解决方法

1.Vue项目 npm install 安装依赖突然报错&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/zrender/download/zrender-4.3.0.tgz failed, reason: certificate has expired npm ERR! A com…

数据是形成新质生产力的优质生产要素

在数字经济背景下&#xff0c;新质生产力以科技创新推动产业创新为要义&#xff0c;以大幅提升全要素生产率为目标&#xff0c;重在加强人工智能、大数据、物联网、工业互联网等数字技术的融合应用&#xff0c;以数据开发利用为引擎促使生产要素实现创新性配置&#xff0c;催生…

探针流量检测与回溯分析,解密AnaTraf网络流量分析仪的神奇魅力

目录 导言 概述 流量检测探针 流量回溯分析 网络故障解决案例 了解更多 导言 在当今互联网时代&#xff0c;网络性能监测与诊断成为企业发展的关键。为了解决网络故障和提升网络性能&#xff0c;AnaTraf网络流量分析仪应运而生。本文将详细介绍AnaTraf的功能和优势&#…

一些Webshell-Bypass的思路

—— 经过这一段时间的研究&#xff0c;针对webshell-Bypass我也有了一些自己的技巧&#xff0c;于是决定写下这篇文章&#xff0c;阅读前提是需要有一点PHP的语言基础。 在讲解代码之前&#xff0c;需要简单了解一下不同查杀平台webshell查杀的查杀原理。对于一些较传统的We…

无限集中的最小数字

题目链接 无限集中的最小数字 题目描述 注意点 1 < num < 1000 解答思路 由题意得&#xff0c;可以理解为最初集合中有1~1000之间的所有数字&#xff0c;如果集合中存在数字&#xff0c;则添加时不会有任何操作&#xff1b;在移除集合中的元素时&#xff0c;会按顺序…

软件体系结构总结

文章目录 一、软件体系结构概述1.1 基本概念1.1.1 背景1.1.2 定义1.1.3 系统1.1.3.1 定义1.1.3.2 特性1.1.3.3 系统的体系结构 1.1.4 软件设计的层次性1.1.5 体系结构的类别&#xff08;类型&#xff09;1.1.6 重要性&#xff08;意义&#xff09; 1.2 模块及其设计1.2.1 定义1…

正点原子Linux学习笔记(九)在 LCD 上显示字符

在 LCD 上显示字符 23.1 原始方式&#xff1a;取模显示字符23.2 freetype 简介23.3 freetype 移植下载 FreeType 源码交叉编译 FreeType 源码安装目录下的文件移植到开发板 23.4 freetype 库的使用初始化 FreeType 库加载 face 对象设置字体大小加载字形图像 23.5 示例代码 前面…

国产根SSL证书,验证签发数据不出境

在探讨SSL证书数据是否可能“出境”的问题之前&#xff0c;我们需要先理解几个基本概念&#xff1a;什么是SSL证书、数据传输的基本流程&#xff0c;以及“出境”在此语境下的含义。本文旨在以科普的方式&#xff0c;清晰地解析这一主题&#xff0c;帮助读者建立起对SSL证书及其…

upload组件封装,支持拖拽文件上传

一、组件封装需要注意什么? 组件化思想:组件应该是独立的、可复用的部件,应该遵循单一职责原则,将组件的功能划分得尽可能细致。 API 设计:组件的 API 设计要合理,要考虑到组件的可定制性和易用性。应该尽可能的提供必要的配置项和事件回调,同时避免提供过多的 API,导…

【启明智显分享】国产自主HMI核心板Model3

Model3是一款高性能的工业级HMI&#xff08;人机界面&#xff09;核心板&#xff0c;也是一款纯国产HMI方案&#xff0c;工业级标准&#xff0c;稳定、可靠&#xff1b; 工业级HMI芯片–Model3 纯国产HMI方案 Model3核心板&#xff0c;具有2D加速&#xff0c;PNG解码&…

高效电源测试设备助力自动化测试和数据分析

在当今电子产品的研发和生产过程中&#xff0c;电源测试设备的重要性不言而喻。一款优秀的电源测试设备能够显著提升测试效率&#xff0c;确保电源模块的性能达到设计要求。 纳米软件NSAT-8000电源测试系统是一款自动化电源测试设备&#xff0c;在测试电源模块时&#xff0c;通…

ESP32 + ST7789 LCD

1、准备 ESP32 单片机开发板 ST7789 LCD 模块&#xff08;240 * 320 像素&#xff09; 杜邦线 2、接线 LCD功能ESP32VCC 供电电压正极 3.3V 、 5V GND 供电电压负极 GNDIDN / MOSI SPI 接口数据 引脚 23CLK 串行接口时钟信号 18CS 芯片选择引脚&#xff1b;低电平有效 5DC 显…

监控员工上网用什么软件,4款优秀的上网行为监控软件优选

很多员工都会对工作有懈怠心理。 在数字化办公环境中&#xff0c;员工的上网行为直接影响着工作效率、信息安全与合规运营。 为确保企业资源合理利用、防止潜在风险&#xff0c;上网行为监控软件成为企业管理的重要辅助工具。 本文将为您推荐五款优秀的上网行为监控软件&#…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存…

棱镜七彩参编《网络安全技术 软件供应链安全要求》国家标准发布

据全国标准信息公共服务平台消息显示&#xff0c;《网络安全技术 软件供应链安全要求》&#xff08;GB/T 43698-2024&#xff09;国家标准已于2024年4月25日正式发布&#xff0c;并将于2024年11月1日正式实施。棱镜七彩作为主要编制单位之一参与该国家标准的编制&#xff0c;为…

【Web后端】jsp基础知识_请求转发和重定向

1.jsp基础知识 1.1简介 java server page&#xff0c;运行在服务器端的页面java代码html代码java代码全部都放在<%%>中间 1.2jsp表达式 作用&#xff1a;将动态信息显示在页面上&#xff0c;以字符串方式&#xff0c;返回给浏览器端语法&#xff1a;<%变量或表达式…