560.Subarray Sum Equals K

25 年 7 月 12 日 星期六
111 字
1 分钟

560. Subarray Sum Equals K

s[j]−s[i]=k

=>

s[i]=s[j]−k 遍历 s,一边枚举右边的 j,一边用哈希表统计左边有多少个 i 满足 i<j 且 s[i]=s[j]−k。

比如 s[j]=2,那么 s[i]=s[j]−k=2−1=1,我们要找的是 j 左边有多少个 s[i]=1。

前缀和

python
class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        s = [0] * (len(nums) + 1)
        for i, x in enumerate(nums):
            s[i + 1] = s[i] + x
        ans = 0
        cnt = defaultdict(int)
        for sj in s:
            si = sj - k
            ans += cnt[si]
            cnt[sj] += 1
        return ans

文章标题:560.Subarray Sum Equals K

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/560subarray_sum_equals_k[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。