Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Note:
- The length of the array is in range [1, 20,000].
- The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].
給予一個整數陣列和一個整數k,你需要計算有多少連續的子陣列之總和等於k。
注意:
- 陣列的大小範圍為 [1, 20,000]。
- 陣列中的數字大小範圍為 [-1000, 1000] 且k的大小範圍為 [-1e7, 1e7]。
sum[i ,j]
代表從i
加到j
的總和,然後使用兩個迴圈跑i
和j
,找到所有等於k
的子陣列。s
有關,因此時間複雜度為O(n^2)
;送出之後果然吃TLE。sum[i, j]
改為先得到sum[0, 0] ~ sum[0, s - 1]
,也就是先只算原本i = 0
的部分。
[1, 2, 3]
,得到[1, 3, 6]
。sum[i, j]
其實就等於sum[0, j] - sum[0, i]
。hash[x]
代表目前所有k + sum[0, i] = x
的數量。(也就是說x - sum[0, i]= k
)sum[0, i]
後,檢查hash[sum[0, i]]
是否有值(配對成功)。hash[k] = 1
來初始化即可。O(n)
。LeetCode
C++