首页 > 其他 > 详细

325. Maximum Size Subarray Sum Equals k

时间:2017-05-12 23:46:56      阅读:554      评论:0      收藏:0      [点我收藏+]

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

原文:http://www.cnblogs.com/lettuan/p/6847575.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!