app网站建设宣传方案,房屋设计装修软件免费app,哈尔滨中企动力科技股份有限公司,怎么才能在百度搜到自己的网站题目 有N个正整数组成的一个序列。给定整数sum#xff0c;求长度最长的连续子序列#xff0c;使他们的和等于sum#xff0c;返回此子序列的长度。如果没有满足要求的序列#xff0c;返回-1。 输入描述 第一行输入是:N个正整数组成的一个序列 第二行输入是:给定整数sum 输出…题目 有N个正整数组成的一个序列。给定整数sum求长度最长的连续子序列使他们的和等于sum返回此子序列的长度。如果没有满足要求的序列返回-1。 输入描述 第一行输入是:N个正整数组成的一个序列 第二行输入是:给定整数sum 输出描述 最长的连续子序列的长度 备注 输入序列仅由数字和英文逗号构成数字之间采用英文逗号分隔。序列长度:1N 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 思路 滑动窗口法以示例数据为例1 2 3 4 2目标和targetSum为6 记i为窗口左边界j为窗口右边界输入的数组为nums初始和为curSumnums[0] 如果curSumtargetSum那么将j右移动并更新当前curSumnums[j]先右移再更新可能越界 如果curSumtargetSum那么记录此时窗口的长度j-i1 如果curSumtargetSum那么i右移并更新当前curSum-nums[i–]先更新再右移不会越界 最后考虑窗口保证有效i,j不得超过nums范围循环条件注意加上ij否则1 2 3 4 2目标和为0,无法通过。 题解
package hwod;import java.util.Arrays;
import java.util.Scanner;public class TheLongestContinueSubStr {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] nums Arrays.stream(sc.nextLine().split(,)).mapToInt(Integer::parseInt).toArray();int sum sc.nextInt();System.out.println(theLongestContinueSubStr(nums, sum));}private static int theLongestContinueSubStr(int[] nums, int sum) {int i 0, j 0, res -1;int curSum nums[0];while (i j i nums.length j nums.length) {if (curSum sum) {j;if (j nums.length) curSum nums[j];} else if (curSum sum) {if (curSum sum) res Math.max(res, j - i 1);curSum - nums[i];i;}}return res;}
}
推荐
如果你对本系列的其他题目感兴趣可以参考华为OD机试真题及题解JAVA查看当前专栏更新的所有题目。