【leetcode系列】【算法】【中等】和爲K的子數組

題目:

題目鏈接: 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章