和为K的连续子数组
Last updated
Last updated
问题简述
思路:前缀和+哈希表
记当前位置的前缀和为 s
;
利用前缀和+哈希表,可以快速判断 s - k
是否存在;若存在表明有一组连续的子数组和为 k
;
定义 book = {s: i}
表示最早在 i
位置出现前缀和为 s
;
比如 arr = [1,1,-1,1]
,其中 s[1] = 0
而不是 3
;
算法:
Tips:
初始化 book
时加入 book[0] = -1
兼容 sum(arr[0:i]) == k
的情况;
比如 arr = [1,2,3,6], k = 6
,遍历到 3 时,book[6] = 2
,此时 book[6-6] = book[0] = -1
存在,更新最大长度为 2 - (-1) = 3