华为OD机试 - 阿里巴巴找黄金宝箱(V)(Java题解)

本文介绍了华为OD机考B卷的一道Java题目,涉及滑动窗口算法。题目要求找到数字字串中连续k个数字和的最大值。文章提供了详细的解题思路、代码实现及完整测试用例。
摘要由CSDN通过智能技术生成

题目描述

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。

阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。

输入描述

第一行输入一个数字字串,数字之间使用逗号分隔,例如:2,10,-3,-8,40,5

  • 1 ≤ 字串中数字的个数 ≤ 100000
  • -10000 ≤ 每个数字 ≤ 10000

第二行输入咒语数字,例如:4,咒语数字大小小于宝箱的个数

输出描述

连续k个宝箱数字和的最大值,例如:39

ACM输入输出模式

如果你经常使用Leetcode,会知道letcode是不需要编写输入输出函数的。但是华为OD机考使用的是 ACM 模式,需要手动编写输入和输出。

所以最好在牛-客上提前熟悉这种模式。例如C++使用cin/cout,python使用input()/print()。JavaScript使用node的readline()console.log()。Java 使用sacnner/system.out.print()

用例1

输入

2,10,-3,-8,40,5
4

输出

39

用例2

输入

8
1

输出

8

代码思路;

这道题的解题思路是使用滑动窗口来求解连续k个宝箱数字和的最大值。

首先,我们需要将输入的数字字串转换成一个整数数组。

接着,我们需要获取咒语数字k。

然后,我们定义一个变量window_sum来保存当前窗口中数字的和。初始时,window_sum的值为数组中前k个数字的和。

接下来,我们定义一个变量ans来保存连续k个宝箱数字和的最大值。初始时,ans的值为window_sum。

然后,我们使用一个循环来遍历数组中剩余的数字。在每次循环中,我们需要更新窗口的和。首先,我们需要将窗口的第一个数字移除,即将window_sum减去arr[i-1]。然后,我们需要将窗口的最后一个数字添加进来,即将window_sum加上arr[i+k-1]。最后,我们需要更新ans的值,将其更新为window_sum和ans中的较大值。

最后,我们返回ans作为结果。

整个算法的时间复杂度为O(n),其中n为数组的长度。

机考代码查重

华为OD机考完成之后,官方会进行代码查重。华为 od 机考确实有很大的概率抽到原题。如果碰到了题库中的原题,一定不要直接使用题解中的代码,尤其是变量名,一定要修改࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值