[LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

[LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

因为题目要求使用O(n)的复杂度,那么之前在min中O(nlogn)做法就不行了。

我们可以使用字典来保存前面的数的和,然后在遍历的时候检查当前和与目标值之差是否存在,如果存在则说明构成一个和为给定值的区间,那就更新区间大小即可。

class Solution(object):
    def maxSubArrayLen(self, nums, k):
        cursum = 0; res = 0
        dic = {}
        for i in range(len(nums)):
            cursum += nums[i]
            if cursum == k:
                res = i + 1
            # 如果存在差,则说明构成了和为给定值的区间
            elif cursum - k in dic:
                res = max(res, i - dic[cursum - k])
            # 记录当前和的下标
            if cursum not in dic:
                dic[cursum] = i
        return res
posted @ 2017-09-02 21:21  banananana  阅读(101)  评论(0)    收藏  举报