zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 94-2

    Maximum Size Subarray Sum Equals k

    要点:

    • 为什么slinding window或者local ending at方法不行?要得到exact equals k,而array不是sorted。
    • idea:基本利用了partial sum差得到subarray sum。另外因为要得到maxLen,所以从左到右scan的时候,相同的partial sum只记录最左边的即可(显然如果是minLen,记录最右)。
      • sum_diff中作为减数的partial sum是exclusive的,所以长度公式是不+1的。同时也容易处理边界条件:初始化map为{0,-1}
      • sum_diff只是右边的partial sum减去左边的,差值即为subarray sum,和结果正负无关

    错误点:

    • 注意减法的顺序:partial sum-k

    https://repl.it/Clxw

    class Solution(object):
        def maxSubArrayLen(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: int
            """
            umap = {0:-1}
            psum = 0
            maxLen = 0
            for i in xrange(len(nums)):
                psum+=nums[i]
                if psum-k in umap:
                    maxLen = max(maxLen, i-umap[psum-k])
                if psum not in umap:
                    umap[psum]=i
            return maxLen
    
    sol = Solution()
    assert sol.maxSubArrayLen([-2,-1,2,1], 1)==2, "max length is 2"
    
  • 相关阅读:
    P4297 [NOI2006]网络收费
    P4207 [NOI2005]月下柠檬树
    bzoj2517 矩形覆盖
    bzoj2506 calc
    ......
    SP1811 LCS
    CF585E Present for Vitalik the Philatelist
    好康的
    CF605E Intergalaxy Trips
    字符串
  • 原文地址:https://www.cnblogs.com/absolute/p/5815856.html
Copyright © 2011-2022 走看看