问题:
求在给定的数组中,子数组中所有数加起来的和等于固定值 aim 的最长子数组长度。
解题思路:
准备一个字典,key是从 -1 位置到当前位置的累加和,value 是第一次得到这个累加和的位置。默认 -1 位置的累加和是0.
从头开始遍历数组,每次都计算从 -1 位置到当前位置的累加和是多少,并将位置信息和 累加和存到字典中,如果一个累加和出现多次,只记录第一次出现这个累加和的位置,因为我们要求的是最长的子数组。
当累加和减去 aim的差值出现在字典中时,表明该差值对应的位置的下一个位置到当前位置,累加和满足 aim,此时更新最长子数组长度信息。
def maxLength(arr, aim):
if len(arr) == 0: return 0
recoder = {}
sum = 0
res = 0
recoder[0] = -1
for i in range(len(arr)):
sum += arr[i]
if sum - aim in recoder.keys():
res = max(res, i - recoder[sum - aim])
if sum not in recoder.keys():
recoder[sum] = i
return res