325. Maximum Size Subarray Sum Equals k
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If there isn't one, return 0 instead.
Note:
The sum of the entire nums array is guaranteed to fit within the 32-bit signed integer range.
Example 1:
Given nums = [1, -1, 5, -2, 3]
, k = 3
,
return 4
. (because the subarray [1, -1, 5, -2]
sums to 3 and is the longest)
Example 2:
Given nums = [-2, -1, 2, 1]
, k = 1
,
return 2
. (because the subarray [-1, 2]
sums to 1 and is the longest)
Follow Up:
Can you do it in O(n) time?
这一题由于数列不是sorted,所以不能用头尾指针的方法。使用一个sum_array, [1, -1, 5, -2, 3]
的sum_array就是【1,0,5,3,6】。如果sum_array中的两个数相差k, 那么这个subarray也是一个候选项。这里由于为了快速查找,使用了hash table。
class Solution(object): def maxSubArrayLen(self, nums, k): result, acc = 0, 0 dic = {} for i in xrange(len(nums)): acc += nums[i] if acc == k: result = max(result, i + 1) if acc not in dic: dic[acc] = i if acc - k in dic: result = max(result, i - dic[acc-k]) return result