Skip to content

Latest commit

 

History

History
28 lines (21 loc) · 804 Bytes

560-subarray-sum-equals-k.md

File metadata and controls

28 lines (21 loc) · 804 Bytes

思路

前缀和 + 哈希表优化

这个题目和两数之和原理是一致的,只不过是将所有的前缀和该前缀和出现的次数存到了 map 里。

复杂度分析

时间复杂度:O(n),其中 n 为数组的长度。我们遍历数组的时间复杂度为 O(n),中间利用哈希表查询删除的复杂度均为 O(1),因此总时间复杂度为 O(n)。

空间复杂度:O(n),其中 n 为数组的长度。哈希表在最坏情况下可能有 n 个不同的键值,因此需要 O(n) 的空间复杂度。

func subarraySum(nums []int, k int) int {
  sum, res := 0, 0
  mp := map[int]int{}
  mp[0] = 1;
  for i := 0; i < len(nums); i++ {
    sum += nums[i]
    if _, ok := mp[sum - k]; ok {
    	res += mp[sum - k]
    }
    mp[sum]++
  }
  return res
}