Subarray Sum
1. Contiguous Array
hash map: cumulative sum -> index
遇到0就减一,遇到1就加一的话,把cumulative sum plot 到图上,那么在同一Y轴上的数就是有相同的0和1,长度就是两个x坐标的差。
注意:一开始要把0 --> -1放进去。
2. Subarray Sum Equals K
prefix sum: hash map: cumulative sum -> appearance occurence
计算累计的数值sum,如果sum - k已经出现在了map.keyset里面,说明在当前坐标和map.get(sum - k)之间的数可以组成= k。因为数组中可以出现负数,所以相同的sum可能出现过好几次,所以value要计算多少occurence。
注意:
map初始要放(0 --> 1)。
count 要先+ map.get(sum - k)。然后再把当前sum加进去。要不然"nums = [1], k = 0"会报成错误的答案1,但实际上应该是0。
3. Maximum Size Subarray Sum Equals k
prefix sum: hash map: cumulative sum -> index
和上面的思路一样,不同的是,如果sum没出现过的话,记录index,但是如果出现过的话,不用理会。因为要找的是最长的subarray,所以记录最先出现的index就好了。
注意:map.put(0, -1)。
4. Continuous Subarray Sum
hash map: remainder -- > index
brute force就是两个for loop尝试所有的组合。
或者,用hash map记录 remainder --> index。map.put(0, -1)。
需要知道:数字a和b分别除以数字c,若得到的余数相同,那么(a-b)必定能够整除c。所以如果当前的余数已经出现过在map里面了,那么说明i 和map.get(remainder)之间的数可以整除k。