Subarray Sum

  1. contiguous array
  2. Subarray Sum Equals K
  3. Maximum Size Subarray Sum Equals k
  4. Continuous 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。

results matching ""

    No results matching ""