算法题(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
相关推荐
小oo呆2 小时前
【学习心得】Python多线程
python
happylifetree5 小时前
Python70:核心语法-函数进阶-案例2
python
王中阳Go6 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳6 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_6 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1238 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi8 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
企业数字化笔记9 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
ZhengEnCi9 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
?abc!9 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode