题目描述
有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;
/**
* 最长的连续子序列
*/
public class Test0044 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] numsStr = scanner.nextLine().split(",");
int n = scanner.nextInt();
int len = numsStr.length;
int[] nums = new int[len];
for (int i = 0; i < len; i++) {
nums[i] = Integer.parseInt(numsStr[i]);
}
// 子序列最大长度,默认-1
int maxLen = -1;
for (int i = 0; i < len-1; i++) {
int sum = nums[i];
if (sum > n) {
continue;
} else if (sum == n) {
maxLen = Math.max(maxLen, 1);
}
int count = 1;
for (int j = i+1; j < len; j++) {
sum += nums[j];
count++;
if (sum > n) {
break;
} else if (sum == n) {
maxLen = Math.max(maxLen, count);
break;
}
}
}
System.out.println(maxLen);
}
}