文章讲解: 58. 区间和 | 代码随想录
一、一维前缀和
1. 普通求和
通常对一维数组求和采用的是从头到尾遍历的方式,时间复杂度是O(n),但当数据量很大的时候很可能会超时。
2. 一维前缀求和
1)初始化前缀和数组,定义一个数组s[i],用来记录前i项数据的和:s[i] = s[i-1] + a[i]
注意:i从1开始,这样不用考虑边界问题
2)查询操作:要计算[l, i]的区间和 = s[i] - s[l-1],时间复杂度是O(1)
3. 看了代码随想录后的想法
1)首先引入python的sys包,并定义Input接收客户端输入(“sys”即“system”,“系统”之意。该模块提供了一些接口,用于访问 Python 解释器自身使用和维护的变量,同时模块中还提供了一部分函数,可以与解释器进行比较深度的交互);
2)定义主函数:
首先将客户端输入的数据转化为行存储的数组,并且为它的下标定义索引,然后初始化前缀和数组和前缀和;
然后遍历所有的 i,使得前缀和不断与下一个元素相加,并为下一个元素赋值为当前和;
接下来定义一个空数组用于存储最后的结果,以索引不超过数组长度-1为条件进行循环,将数组里的元素两两一组进行赋值;
最后处理特殊边界情况,当第一个区间元素的下标索引为0时,意味着要求的区间从0开始,因此数组区间和就是第二个区间元素所对应的值;其他情况下,区间和等于第二个区间元素对应的值减去第一个区间元素-1所对应的值;然后将上述结果添加到存储最后结果的数组中;
最后根据客户端的输入区间,依次输出区间和;
3)调用主函数。
文章讲解:
二、二维前缀和(子矩阵的和)
1. 初始化前缀和数组:定义一个二维数组s[i][j],用来记录前(i, j)到原点所有数的和项数据的和
2. s[i][j]=s[i][j-1]+s[i-1][j]+a[i][j]-s[i-1][j-1]
三、数组篇总结
文章链接: 代码随想录