概述
题目
输入:nums = [1,1,1], k = 2
输出: 2
解释: 此题 [1,1] 与 [1,1] 为两种不同的情况
解法
- 前缀和 + 哈希表
- 多开辟一点空间
- preSum[j] = k + preSum[i] ; k = a[i+1] + ···+a[j] =>子数组和
class Solution:
def subarraySum(self, nums: List[int], k: int) -> int:
# +- no using window
# using prefix sum
# preprocessing
n = len(nums)
preSum = [0]* (n+1)
pre= 0
for i in range(n):
pre += nums[i]
preSum[i+1] = pre
# main using hash map / dictionary
dic = {}
count = 0
for i in range(n+1):
if preSum[i] - k in dic:
count += dic[preSum[i] - k]
if preSum[i] not in dic:
dic[preSum[i]] = 1
else:
dic[preSum[i]] += 1
return count
最后
以上就是羞涩黑夜为你收集整理的剑指 Offer II 010. 和为 k 的子数组题目解法的全部内容,希望文章能够帮你解决剑指 Offer II 010. 和为 k 的子数组题目解法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复