
layout:false
题目:
给定一个数组 arr,该数组无序,但每个值均为正数,再给定一个正数 k。求 arr的所有子数组中所有元素相加和为 k 的最长子数组长度。例如,arr=[1,2,1,1,1],k=3。累加和为 3 的最长子数组为[1,1,1],所以结果返回 3。
【要求】
时间复杂度 O(N),额外空间复杂度 O(1)
思路:定义两个指针left和right,初始时left和right都指向0位置。sum记录left和right之间元素之和,初始sum=0。len记录当前最长子数组长度,初始时len=0
- 当sum<k时,sum+=arr[right],然后right往右移动
- 当sum>k时,sum-=arr[left],然后left向右移动
- 当sum=k时,计算这时数组的长度temp=right-left。比较len与temp的长度大小。然后再计算sum+=arr[right],right向右滑动。
|
|




近期评论