题目描述
有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,
如果没有满足要求的序列,返回-1。
输入描述
第一行输入是:N个正整数组成的一个序列
第二行输入是:给定整数sum
输出描述
最长的连续子序列的长度
备注
- 输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分隔
- 序列长度:1 <= N <= 200
- 输入序列不考虑异常情况
示例1
输入
1,2,3,4,2
6
输出
3
说明
1,2,3和4,2两个序列均能满足要求,所以最长的连续序列为1,2,3,因此结果为3。
示例2
输入
1,2,3,4,2
20
输出
-1
说明
没有满足要求的子序列,返回-1
解题思路
使用滑动窗口的方式来解决这个问题
- 通过
left
和right
这两个指针维护一个滑动窗口,sum
用于跟踪当前窗口内的元素和。 - 当
sum
大于target
时,代码缩小窗口,通过移动左指针并减少sum
来调整窗口。 - 一旦
sum
等于target
,更新最大长度maxLen
。
Java
import java.util.Arrays;
import java.util.Scanner;