【Leetcode】560. Subarray Sum Equals K

【Leetcode】560. Subarray Sum Equals K_第1张图片

1 这种题有一个共同的特性就是,会有很多个subarray,但是对应的target value只有k一个,所以可以想着用hashmap来做,即k是key,subarray的数目是对应的value

2 当我们遍历数组中的数字时,用sum来记录到当前位置的累加和,同时以累加和sum为key建立一个hashtable,如果之前有sum-k存在,则说明这两个位置之间的累加和是k,前面有几个sum-k存在,则就有多少个subarray累加和为k。当然需要遍历完整个array,这样才能得出所有满足要求的subarray

3 为什么要初始化hashmap={0:1}呢?这是因为如果从起始位置到当前元素的累加刚好是K的话,这是满足题意的,如果我们没有{0:1}这个初始化,我们就无法将这个结果包括进来

4 if hashmap.get(sumn-k): ret += hashmap.get(sumn-k) 这句code的先后顺序也很关键。当k=0的时候,hashmap.get(sumn-k)是会把更新后的键的值加进来,就会算重复很多次

5 所以应该先判断再更新

二刷:

1 犯了个错误,累积和并不是唯一的,前面可以有多个subarray的累加和是同一个数

2 初始化map应该是map{0:1}


【Leetcode】560. Subarray Sum Equals K_第2张图片

别人的follow up:
(有排序且沒有負數) 返回 boolean, 我先用了set所以followup是能不能优化复杂度,然后我用了两个指针。

3刷还是犯的错误:

累积和并不是唯一的,前面可以有多个subarray的累加和是同一个数


【Leetcode】560. Subarray Sum Equals K_第3张图片

1 四刷注意初始化dic[0]=1,因为可以是从index为0开始的array和等于k,这是属于一种情况的

你可能感兴趣的:(【Leetcode】560. Subarray Sum Equals K)