代码随想录Day 2 补充【前缀和】+【数组篇总结】 | 58.区间和、44.开发商购买土地

 一、一维前缀和

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]

三、数组篇总结

文章链接: 代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值