Continuous Subarray Sum(2 sum)
Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to the multiple of k, that is, sums up to n*k where n is also an integer.
Example 1:
Input:
[23, 2, 4, 6, 7], k=6
Output:
True
Explanation:
Because [2, 4] is a continuous subarray of size 2 and sums up to 6.Example 2:
Input:
[23, 2, 6, 4, 7], k=6
Output:
True
Explanation:
Because [23, 2, 6, 4, 7] is an continuous subarray of size 5 and sums up to 42.Note:
The length of the array won't exceed 10,000.
You may assume the sum of all the numbers is in the range of a signed 32-bit integer.
分析
2个loop做法:这里presum[j] - presum[i] 包括j 不包括i,根据题意这里j-i>=2才行。 所以Presum计算的时候坐标后移一位。
自己版本:2个loop
2个loop:map的坐标后移一位。补充{0:0} 这样d[2]-d[0]就是2个数至少
1个loop : map sum: index. 初始化{0,-1}
其实这里还是2 sum问题。x = presum % k,如果X再次出现,直接隔得就是multiple of k。corner是k=0
还是Index直接相减,留尾去头。i-j>=2
Last updated
Was this helpful?