【算法】数组的前缀和 Prefix Sum

算法中有前缀和这样一种很好的数据结构,它能极大地降低区间查询的时间复杂度  => Prefix sum常常用于求subarray的题目,或则是一些连续的值的和

前缀和 - Prefix Sum 

它是这样的,假如有这样一个数组(序列),  A = [a1, a2, a3, a4, a5, a6, a7, a8]  ==> 那么它的前缀和 Prefix Sum数组应该是如下:  prefixSum = [sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8]

它的计算方式是这样的:  sum1 = a1;

                                          sum 2 = a1 + a2 = sum1 + a2

                                          sum3 = a1 + a2 + a3 = sum2 + a3

                                          sum4 = a1 + a2 + a3 + a4 = sum3 + a4

                                          sum5 = a1 + a2 + a3 + a4 + a5 = sum4 + a5

得到前缀和 Prefix Sum数组后,比如我们现在要求计算数组A中a1和a5之间的区间值, 或者说是a3和a7之间的区间值

显然a1和a5之间的区间值  =  sum5 - sum1   a3和a7之间的区间值 = sum7 - sum3

 

现在有一道LeetCode上面的算法题是这样的 =>  Subarray Sum Equals K   也就是说给一个数组 A = [a1, a2, a3, a4, a5, a6, a7, a8],  以及一个整数K, 计算差值为K的两个元素的区间数

比如整个数组A中有 (a1+a2+a3) - a1 = K  和 (a1+a2+a3+a4+a5)- (a1+a2) =K ,那么区间数为2

如果a1+a2+....+a8 = K 也就是说整个A数组的值加起来也等于K, 那么这也算一个区间

如果整个数组中没有任何一个区间的值=K, 那么返回0

这个题目显然应该用Prefix Sum来实现

 

posted on   新西兰程序员  阅读(271)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示