給定乙個整數陣列和乙個整數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]
時,雜湊表mp
為,
pre[1] - 7 = 0
,雜湊表中存在鍵0
。
遍歷到nums[2]
時,雜湊表mp
為,
pre[2] - 7 = 7
,雜湊表中存在鍵7
。
遍歷到nums[5]
時,雜湊表mp
為,
pre[5] - 7 = 7
,雜湊表中存在鍵7
。
遍歷到nums[7]
時,雜湊表mp
為,
pre[7] - 7 = 13
,雜湊表中存在鍵13
。
最後,和為k
的連續的子陣列的個數為4
。
示例:nums = [3, 4, 7, 2, -3, 1, 4, 2, 1], k = 7
遍歷到nums[8]
時,雜湊表mp
為,
pre[8] - 7 = 14
,雜湊表中存在鍵14
。
最後,和為k
的連續的子陣列的個數為6
。
符合條件的子陣列個數多了兩個,分別為[2, -3, 1, 4, 2, 1]
和[4, 2, 1]
。
雜湊表中mp
中14=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 ...