思路:
对每个位置进行考虑分析,然后从中找到最大的
1、累加和为目标值的最长子数组(哈希表)
奇数偶数长度相等的最长子数组(奇数为1,偶数为-1,求累加和为0的最长子数组)
def longestSumArray(arr,k): #k为目标值
dict={} #记录每个位置的累加和,key为累加和,value为当前位置
ll=0 #输出
summ=0
dict[0]=-1 #重要步骤,位置-1的累加和为0
for i in range(len(arr)):
summ+=arr[i]
if summ-k in dict: #sum-k出没出现过
ll=max(i-dict[summ-k],ll) #出现过,长度则为i-dict[summ-k],没出现过,长度为0
if summ not in dict: #更新dict,累加和出现过不更新
dict[summ]=i
return ll
arr=[7,3,2,1,1,7,-6,-1,7]
print(longestSumArray(arr,7))
1(2)累加和为目标值的最大子数组(仅有正数):双指针法【单调性】
def maxlen(arr,aim):
if not arr or len(arr)==0 or aim<=0:
return 0
l=0
r=0