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}
别人的follow up:
(有排序且沒有負數) 返回 boolean, 我先用了set所以followup是能不能优化复杂度,然后我用了两个指针。
3刷还是犯的错误:
累积和并不是唯一的,前面可以有多个subarray的累加和是同一个数
1 四刷注意初始化dic[0]=1,因为可以是从index为0开始的array和等于k,这是属于一种情况的