Leetcode 刷题 - 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.

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?


不看Follow Up,直接最快想到的就是把所有的subarray拿出来求值啊,然后比大小啊

result = []
for i in xrange(len(nums)):
    for j in xrange(i, len(nums)):
        curr = nums[i:j+1]
        if sum(curr) == k:
            result.append(nums[i:j+1])

if len(result) == 0:
    return 0

return max([len(i) for i in result])

瞬间搞定。需要注意的是一些test case可能出现最终给一个空的list,就是题目提到的,检查一下返回0就是了。

但是这样速度太慢了。是O(n*n)


参考之后有一个O(n)的算法

class Solution(object):
    def maxSubArrayLen(self, nums, k):

        result, acc = 0, 0
        dic = {0: -1}

        for i in xrange(len(nums)):
            acc += nums[i]
            if acc not in dic:
                dic[acc] = i
            if acc - k in dic:
                result = max(result, i - dic[acc-k])

        return result

使用字典数据结构,然后累加之后对index进行比较。

Tip:累加为0需要先填写,否则中间段出现的0的话,就会值计算从中间段开始的index,而出现0的话应该从头计算,因为之前的所有加起来刚好是0,需要补充到最大的subarray里。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值