华为OD机试之最长连续子序列(Java源码)

这篇具有很好参考价值的文章主要介绍了华为OD机试之最长连续子序列(Java源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最长连续子序列

题目描述

有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,

如果没有满足要求的序列,返回-1。


输入描述

第一行输入是:N个正整数组成的一个序列

第二行输入是:给定整数sum


输出描述

最长的连续子序列的长度

备注

  • 输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分隔
  • 序列长度:1 <= N <= 200
  • 输入序列不考虑异常情况

用例

输入

1,2,3,4,2
6

输出 3
说明 1,2,3和4,2两个序列均能满足要求,所以最长的连续序列为1,2,3,因此结果为3。
输入 1,2,3,4,2
20
输出 -1
说明 没有满足要求的子序列,返回-1

题目解析

  1. 使用双指针找到对相邻的数进行求和。若和正确,那么就判断长度是否比前面出现的长度都大,若大就进行记录。
  2. 若和大于,那么就证明该区间内不存在目标序列。左指针右移,临和减掉移出的左侧的那个。
  3. 若和小于,就证明该区间还可以往右扩充,右指针右移,临和加上移入的那一个。这样就避免了在内部在使用循环计算区间和了。
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()) {
			if (tempSum < sum) {
				right++;
				if (right == numList.size())
					break;// 超出了
				tempSum += numList.get(right);
				// System.out.println(tempSum);
			} else if (tempSum > sum) {
				tempSum -= numList.get(left);
				left++;
			} else {
				// System.out.println(right - left + "-");
				// System.out.println(right + "-----" + left);
				if (len < right - left) {
					len = right - left + 1;
				}
				tempSum -= numList.get(left);
				left++;

			}
		}
		System.out.println(len);
	}
}


代码运行示意图
华为OD机试之最长连续子序列(Java源码)
华为OD机试之最长连续子序列(Java源码)文章来源地址https://www.toymoban.com/news/detail-485374.html

到了这里,关于华为OD机试之最长连续子序列(Java源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD机试之Boss分销提成计算(boss的收入)(Java源码)

    题目描述 一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销. 规定,每个月,下级分销需要将自己的总收入 (自己的+下级上交的) 每满100元上交15元给自己的上级. 现给出一组分销的关系,和每个分销的收入,

    2024年02月09日
    浏览(55)
  • 华为OD机试之阿里巴巴找黄金宝箱(II)(Java源码)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~n 的箱子,每个箱子上面贴有箱子中藏有金币的数量。 从金币数量中选出一个数字集合,并销毁贴有这些数字的每个箱子,如果能销毁一半及以上的箱子,则返回这个数字

    2024年02月09日
    浏览(57)
  • 华为OD机试之最小调整顺序次数、特异性双端队列(Java源码)

    题目描述 有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。 小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据。 现在要求移除数据

    2024年02月07日
    浏览(47)
  • 华为OD机试 - 最多等和不相交连续子序列(Java & JS & Python)

    题目描述 给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。 数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。 求一组连续子序列,组内子序列的数目最多。 输出这个数目。 输入描述 第一行输入为数组长度

    2023年04月18日
    浏览(46)
  • 华为OD机试真题 Java 实现【在字符串中找出连续最长的数字串】【2023 B卷 100分】,附详细解题思路

    输入一个字符串,返回其最长的数字子串,以及其长度。 若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)。 本题含有多组样例输入。 数据范围: 字符串长度 1≤n≤200 , 保证每组输入都至少含有一个数字。 输入一个字符串。 输出字符串中最长的数

    2024年02月08日
    浏览(55)
  • 华为OD机试 - 最长公共后缀(Java & JS & Python)

    题目描述 编写一个函数来查找字符串数组中的最长公共后缀; 如果不存在公共后缀,返回固定字符串: @Zero。 补充说明: 字符串长度范围:[2, 1000] 字符串中字符取值范围为[1, 126] 输入描述 无 输出描述 无 用例 输入 [\\\"abc\\\",\\\"bbc\\\",\\\"c\\\"] 输出 \\\"c\\\" 说明 返回公共后缀: c 输入 [\\\"aa\\\",\\\"b

    2024年02月13日
    浏览(56)
  • 华为OD机试之阿里巴巴找黄金宝箱(I)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和; 第一个箱子左边部

    2024年02月09日
    浏览(49)
  • 华为OD机试 - 最长合法表达式(Java & JS & Python & C)

    题目描述 提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回 0 。 简单数学表达式只能包含以下内容: 0-9数字,符号+-* 说明: 所有数字,计算结果都不超过long 如果有多个长度一样的,请返回第一个表达式的结果 数学表达

    2024年02月04日
    浏览(45)
  • 华为OD机试 - 寻找符合要求的最长子串(Java & JS & Python)

    题目描述 给定一个字符串s,找出这样一个子串: 该子串中任意一个字符最多出现2次 该子串不包含指定某个字符 请你找出满足该条件的最长子串的长度 输入描述 第一行为:要求不包含的指定字符,为单个字符,取值范围[0-9a-zA-Z] 第二行为:字符串s,每个字符范围[0-9a-zA-

    2024年02月05日
    浏览(48)
  • 【华为OD统一考试B卷 | 200分】最长的完全交替连续方波信号(C++ Java JavaScript python)

    在线OJ 已购买本专栏用户,请私信博主开通账号,在线刷题!!! 运行出现 Runtime Error 0Aborted,请忽略 华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将的 2022/0223Q(1/2/3/4)统一修改为OD统一考试(A卷)和OD统一考试(B卷)。 你收到的链接上面会标注A卷还是B卷。

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包