算法题(Python)数组篇 | 6.区间和

算法题(Python)数组篇 | 6.区间和

一、题目描述

给定一个整数数组Array,请计算该数组在每个指定区间内元素的总和。

输入描述:

复制代码
第一行输入为整数数组Array的长度n,接下来n行,每行一个整数,表示数组的元素。
随后的输入为需要计算总和的区间下标:a,b(b >= a),直至结束 

输出描述:

复制代码
输出每个指定区间内元素的总和。

二、思路

首先看到本题时的最直观的想法是暴力解法,即:给一个区间,把这个区间的和都累加一遍即可,代码如下:

python 复制代码
if __name__ == "__main__":
    n = int(input())
    nums = [0] * n
    for i in range(0, n):
        nums[i] = int(input())
    while True:
        try:
            a, b = map(int, input().split())
            sum = 0
            for i in range(a, b + 1):
                sum += nums[i]
            print(sum)
        except:
            break

但是提交代码后,存在超时问题:

举一个极端的例子,如果我查询m次,每次查询的范围都是从0到n-1,那么该算法的时间复杂度是 O ( n × m ) O(n \times m) O(n×m)。如果查询次数非常大的话,这个时间复杂度会很高。

因此,通过此题引入前缀和概念,前缀和的思想是重复利用计算过的子数组之和,从而降低区间查询需要累加计算的次数。

前缀和 在涉及计算区间和的问题时非常有用!

示例:假设我们要统计numsi这个数组上的区间和。我们先做累加,即pi表示下标0到i的numsi累加之和。

如果,我们想统计nums数组上下标2到下标5之间的累加和,是不是用p5-p1即可:

p1 = nums0 + nums1

p5 = nums0 + nums1 + nums2 + nums3 + nums4 + nums5

p5 - p1 = nums2 + nums3 + nums4 + nums5

如下图所示,p5 - p1就是绿色部分的区间和,而p数组是之前计算好的累加和,所以后面每次求区间和之后,只需要 O ( 1 ) O(1) O(1)操作。

本题代码如下:

python 复制代码
if __name__ == "__main__":
    n = int(input())
    nums = [0] * n
    p = [0] * n
    presum = 0
    for i in range(0, n):
        nums[i] = int(input())
        presum += nums[i]
        p[i] = presum
    while True:
        try:
            sum = 0
            a, b = map(int, input().split())
            if a == 0:
                sum = p[b]
            else:
                sum = p[b] - p[a - 1]
            print(sum)
        except:
            break
相关推荐
闵孚龙4 小时前
动态图机制:为什么 PyTorch 调试起来更舒服
人工智能·pytorch·python
JAVA面经实录9174 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
chushiyunen4 小时前
langchain4j笔记、tools
笔记·python·flask
程序员三藏5 小时前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
在放️5 小时前
Python 爬虫 · 第三方代理接入与合规使用
开发语言·爬虫·python
开源Z5 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode
旖-旎6 小时前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill
财经资讯数据_灵砚智能6 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月14日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
syagain_zsx6 小时前
STL 之 vector 讲练结合
c++·算法