最长连续子序列
描述
有N个正整数组成的一个序列,给定一个整数sum,求长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。
输入描述
第1行有N个正整数组成的一个序列。
第2行给定一个整数sum。
输出描述
长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。
示例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。
法一
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
List<Integer> list = Arrays.stream(sc.nextLine().split(",")).map(
Integer :: parseInt).collect(Collectors.toList());
int target = sc.nextInt();
//对要找的结果集坐二次循环
int max = 0;
for (int i = 0 ; i < list.size() ; i++) {
int sub_len = 0;
int sub_sum = 0;
//对每一次找到的结果集长度与总和做一次清空
for (int j = i ; j < list.size() ; j++) {
if (sub_sum > target)
break; //此时已经刚好等于结果了,不需要再往下加
sub_sum += list.get(j);
sub_len++;
if (sub_sum == target && sub_len > max) {
max = sub_len;
}
}
}
System.out.println(max == 0 ? -1 : max);
}
}
}