1. 程式人生 > >325. Maximum Size Subarray Sum Equals k

325. Maximum Size Subarray Sum Equals k

ret 快速 arr guarantee 快速查找 you def targe bject

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

325. Maximum Size Subarray Sum Equals k