大明子又称小码哥

大明子又称小码哥

最长连续子序列

题目描述

有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);
	}
}

代码运行示意图
华为OD机试之最长连续子序列(Java源码)-LMLPHP
华为OD机试之最长连续子序列(Java源码)-LMLPHP

06-15 12:45