560. 和为K的子数组

这道题我们学到了一个重要知识点和一个好用的小技巧。
先说小技巧,当我们想把字典中key为m的值加1的时候,如果这个key不在字典里那么会报错。不使用defaultdict的话,我们可以使用:count[m] = count.get(m,0) + 1
get拿不到m的话就为0了,然后+1。如果能拿到那就是m对应的值加1。
现在来讲这道题的重要知识点:前缀和。
如何在On复杂度的情况下解决这个问题,就必须要使用前缀和。前缀和就是当我遍历到第 i 个元素的时候,我的表中维护着之前0 - i 为结尾的所有元素的和。例如前两项的和,前三项的和。
有了这个前缀和,当我们遍历到第 i 个的时候,如果这个i 的前缀和 - k 在我们的前缀和中,意味着:在i前面有某个子数组q ,使得q + k 等于 i的前缀和。那么就说明i的前缀和中除去q那段数组就是我们要的加和为k的数组了。

浙公网安备 33010602011771号