【算法】前缀和

目录

一、题目描述

二、算法原理

动态规划

1.前缀和

1.1同类累积

1.2所有路出

三、提交代码


一、题目描述

【模板】前缀和_牛客题霸_牛客网

描述

对于给定的长度为 nn 的数组 {a1,a2,...,an}{a1​,a2​,...,an​} ,我们有 mm 次查询操作,每一次操作给出两个参数 l,rl,r ,你需要输出数组中第 ll 到第 rr 个元素之和,即 al+al+1+⋯+aral​+al+1​+⋯+ar​ 。

输入描述:

第一行输入两个整数 n,m(1≦n,m≦105)n,m(1≦n,m≦105) 代表数组中的元素数量、查询次数。

第二行输入 nn 个整数 a1,a2,...,an(−109≦ai≦109)a1​,a2​,...,an​(−109≦ai​≦109) 代表初始数组。

此后 mm 行,每行输入两个整数 l,r(1≦l≦r≦n)l,r(1≦l≦r≦n) 代表一次查询。

输出描述:

对于每一次查询操作,在一行上输出一个整数,代表区间和。

示例

输入:

复制代码
3 2
1 2 4
1 2
2 3

输出:

复制代码
3
6

二、算法原理

动态规划

同类累积问题 可 所有路出

1.前缀和

1.1同类累积

前缀区间和 = 再前缀区间和 + 当前数(dpi = dpi - 1 + arri)

1.1.1拆拼

整体 拆成****能同类累积部分 拼合成:

238. 除自身以外数组的乘积 - 力扣(LeetCode)

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法, 且在 O(n) 时间复杂度内完成此题。

示例 1:

复制代码
输入: nums = [1,2,3,4]

输出: [24,12,8,6]

示例 2:

复制代码
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 105
  • -30 <= nums[i] <= 30
  • 输入 保证 数组 answer[i] 在 32 位 整数范围内
java 复制代码
public int[] productExceptSelf(int[] nums) {
    int n = nums.length;
    int[] f = new int[n], g = new int[n], ret = new int[n];
    f[0] = g[n - 1] = 1;
    for (int i = 1; i < n; i++)
        f[i] = f[i - 1] * nums[i - 1];
    for (int i = n - 2; i >= 0; i--)
        g[i] = g[i + 1] * nums[i + 1];
    for (int i = 0; i < n; i++)
        ret[i] = f[i] * g[i];
    return ret;
}

1.2所有路出

所有前缀区间和 能 一路累积算出


三、提交代码

java 复制代码
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt(), m = in.nextInt();
    int[] array = new int[n + 1];
    for(int i = 1;i <= n;i++) array[i] = in.nextInt();

    // 所有前缀和累积算出
    long[] dp = new long[n + 1];
    for(int i = 1;i <= n;i++) dp[i] = dp[i - 1] + array[i];

    while(m > 0) {
        int l = in.nextInt(), r = in.nextInt();
        System.out.println(dp[r] - dp[l - 1]);
        m--;
    }
}

相关推荐
机器人零零壹1 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
AI你一生一世3 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
ZhengEnCi4 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
前进的李工5 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考5 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
正在走向自律6 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
nm_zfyjt7 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客