算法中的前缀和思想
在算法题中,我们常常会遇见这样的题:
- 给定一个数组,求最大连续子数组(连续的和最大)
大家第一时间肯定想到的是用循环遍历,然而这种题型往往用循环势必会超时!
因为循环就意味着会做很多重复计算,所以我们引入前缀和思想:
- 将我们之前算出的能够重复使用的数据存下来,即用即取,空间换取时间
比如如上的最大连续子数组问题,我们可以将从0到i( i>=0 ,i<array.length)的和存在一个数组中,
然后再循环遍历相减得到最大连续数组(当然这并不是此题的最优解,感兴趣的可以自行查阅资料)
总之,前缀和的思想就是让我们减少一些重复的计算,这对算法优化帮助很大.
当然这只是我个人的理解,还请各位批评指正!