和为K的子数组

560.和为K 的子数组

https://leetcode-cn.com/problems/subarray-sum-equals-k/submissions/
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例:
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

解析:
1.暴力解:
也没有想出怎么暴力
2.借鉴两数之和的思想,hash表帮助解题,如果做出这个数组的累加和数组,那么这个问题就顺理成章地转化成 两数之差为K 的问题,迎刃而解。

class Solution(object):
    def subarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        n = len(nums)
        sums = {0:1}
        result = 0
        count = 0
        for i in range(n):
            result += nums[i]
            if sums.has_key(result - k):
                count += sums[result - k]
            if sums.has_key(result):
                sums[result] += 1
            else:
                sums[result] = 1
            
        return count

3.知识点:
hash 表查找key的复杂度是O(1).
14,15行一定要放在16-19行前面,不然当K=0时,总是会搜到一个长度为0的子数组,就是自己这个位置。
第9行的初始化,代表从头开始的一个子数组。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 ...
    万浩2020阅读 4,457评论 0 0
  • 题目:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 :输入:nums ...
    墨殇染泪阅读 1,735评论 0 1
  • 题目链接难度:中等 类型: 数组、前缀和 给定一个整数数组和一个整数 k,你需要找到该数组中和...
    wzNote阅读 4,095评论 0 1
  • 前几天我和爱人吵架啦!吵的很凶。 八岁女儿在她自己的房间里都听见啦! 但是女儿没有哭,没有害怕,也没表现出什么异常...
    一粒尘埃__阅读 3,089评论 0 1
  • 清单宣言 ☞我们所做的事情完全超出了能力范围。人类并非全知全能,即便得到先进科技的支持,我们的能力也是有限的。 ☞...
    ab06bfebe085阅读 3,480评论 0 2