和為 K 的子陣列

烟熏咸鱼干發表於2024-04-26

Problem: 560. 和為 K 的子陣列
給你一個整數陣列 nums 和一個整數 k ,請你統計並返回 該陣列中和為 k 的子陣列的個數 。

子陣列是陣列中元素的連續非空序列。

示例 1:

輸入:nums = [1,1,1], k = 2
輸出:2
示例 2:

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

思路

看了提示 使用字首和配合雜湊

Code

func subarraySum(nums []int, k int) int {
	result := 0
	// 看了提示 使用字首和配合雜湊
	// 使用迴圈計算字首和
	prefixSum := 0
	mapIntInt := make(map[int]int)
	mapIntInt[0]++
	for _, value := range nums {
		// 當前字首和減去k即為需要查詢的字首和
		prefixSum += value
		if v, ok := mapIntInt[prefixSum-k]; ok {
			// 找到
			result += v
		}
		// 將當前字首和存入map
		mapIntInt[prefixSum]++
	}
	return result
}

相關文章