最大子数组之和为k

题目地址
创建一个hash表,其key等于数组中遍历过的数的和,其value等于当前遍历的数在数组中的下标。用sum保存遍历过的数的总和,len保存最大长度;依次从数组的开头遍历,如果sum-k的值在hash表中有记录,则len更新为i-map[sum-k]和len的较大值,如果不存在就将{sum,i}加入map中,以便下次查询。

def maxSubArrayLen(self, nums, k):
        hash = {0:0}
        sum = 0
        max_len = 0
        #lookingfor 代表当前位置之前的和
        for i in range(1,len(nums)+1):
            sum += nums[i-1]
            lookingfor = sum - k 
            if hash.has_key(lookingfor):
                length = i - hash[lookingfor]
                max_len = max(max_len, length)
            if hash.has_key(sum) != True:
                hash[sum] = i
                
        return max_len

你可能感兴趣的:(最大子数组之和为k)