和為K的子陣列 字首和 雜湊表

2022-07-08 09:42:11 字數 1592 閱讀 7426

給定乙個整數陣列和乙個整數k,你需要找到該陣列中和為k的連續的子陣列的個數。

示例 1 :

輸入:nums = [1,1,1], k = 2

輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。

public int subarraysum(int nums, int k) 

mp.put(pre, mp.getordefault(pre, 0) + 1);

} return count;

}

我們定義pre[i][0...i]裡所有數的和。

假設和為k的子陣列下標範圍為[j...i],於是pre[i] - k = pre[j - 1]

示例:nums = [3, 4, 7, 2, -3, 1, 4, 2], k = 7

遍歷到nums[1]時,雜湊表mppre[1] - 7 = 0,雜湊表中存在鍵0

遍歷到nums[2]時,雜湊表mppre[2] - 7 = 7,雜湊表中存在鍵7

遍歷到nums[5]時,雜湊表mppre[5] - 7 = 7,雜湊表中存在鍵7

遍歷到nums[7]時,雜湊表mppre[7] - 7 = 13,雜湊表中存在鍵13

最後,和為k的連續的子陣列的個數為4

示例:nums = [3, 4, 7, 2, -3, 1, 4, 2, 1], k = 7

遍歷到nums[8]時,雜湊表mppre[8] - 7 = 14,雜湊表中存在鍵14

最後,和為k的連續的子陣列的個數為6

符合條件的子陣列個數多了兩個,分別為[2, -3, 1, 4, 2, 1][4, 2, 1]

雜湊表中mp14=2表示字首和為14的子陣列出現了兩次,這兩個子陣列分別為[3, 4, 7][3, 4, 7, 2, -3, 1]

參考:

字首和 路徑總和III 和為k的子陣列

437.路徑總和 iii 給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 ro...

力扣 560 和為K的子陣列 雜湊

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。陣列的長度為 1,20,000 陣列中元素的範圍是 1000,1000 且整數 k 的範圍是 1e7,1e7 class soluti...

和為k的子陣列

給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。說明 陣列的長度為 1,20,000 陣列中元素的範圍是 1000,1000 且整數 k 的範圍是 1e7,1e7 o n ...