最长连续子序列
题目描述
有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,
如果没有满足要求的序列,返回-1。
输入描述
第一行输入是:N个正整数组成的一个序列
第二行输入是:给定整数sum
输出
最长的连续子序列的长度
备注
- 输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分隔
- 序列长度:1 <= N <= 200
- 输入序列不考虑异常情况
用例
解析
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class T53 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int sum = Integer.parseInt(sc.nextLine());
List<Integer> numList = new ArrayList<>();
Arrays.stream(input.split(",")).forEach(s -> {
numList.add(Integer.parseInt(s));
});
int left = 0;
int right = 0;
int tempSum = numList.get(left);// 临时的区间和
int len = -1;
while (right < numList.size() - 1) {
if (tempSum < sum) {
right++;
tempSum += numList.get(right);
//System.out.println(tempSum);
} else if (tempSum > sum) {
left = right;
tempSum = 0;
} else {
if (len < right - left) {
len = right - left + 1;
}
left++;
tempSum = 0;
}
}
System.out.println(len);
}
}
代码运行示意图