我是靠谱客的博主 羞涩黑夜,最近开发中收集的这篇文章主要介绍剑指 Offer II 010. 和为 k 的子数组题目解法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

输入: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 的子数组题目解法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部