題目:
題目鏈接: https://leetcode-cn.com/problems/subarray-sum-equals-k/
解題思路:
有點類似於“兩數之和”的思路
遍歷數組的時候,同時累加從第一個元素到當前元素的和sum,放入到hash表中。同時判斷sum - k是否在hash表中存在
如果存在,說明之前至少存在一個下標爲idx的元素,idx之前的子數組之和爲sum - k,idx之後的子數組適合爲k,這個時候更新結果個數 += 子數組之和爲sum - k的個數
代碼實現:
class Solution:
def subarraySum(self, nums: List[int], k: int) -> int:
rec = collections.defaultdict(int)
# 如果不把0加進去,如果遍歷時的當前元素 = k,則無法找到
rec[0] = 1
curr_sum = 0
res = 0
for a in nums:
# 對和進行累加(如果數組特別大,這裏可能需要考慮值類型溢出的事情)
curr_sum += a
# 如果curr_sum - k在rec表中存在,說明至少存在一個下標爲idx的元素
# idx之前的子數組之和爲curr_sum - k,idx到當前元素的子數組值和爲k
if curr_sum - k in rec:
res += rec[curr_sum - k]
rec[curr_sum] += 1
return res