华为OD机考算法题:阿里巴巴找黄金宝箱(V)

news/2024/7/20 17:38:17 标签: 华为od, 算法, 链表, 数据结构, Java, Javascript

题目部分

题目阿里巴巴找黄金宝箱(V)
难度
题目说明一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有一个数字。
阿里巴巴念出一个咒语数字 k ( k<N ),找出连续 k 个宝箱数字和的最大值,并输出该最大值。
输入描述第一行输入一个数字字串,数字之间使用逗号分隔,例如: 2,10,-3,-8,40,5。
1 ≤ 字串中数字的个数 ≤ 100000。

-10000 ≤ 每个数字 ≤10000。
第二行输入咒语数字,例如: 4,咒语数字大小小于宝箱的个数。
输出描述连续 k 个宝箱数字和的最大值,例如: 39。
补充说明
------------------------------------------------------
示例
示例1
输入2,10,-3,-8,40,5
输出39
说明
示例2
输入8
1
输出8
说明


解读与分析

题目解读

给出 N 个数字,求出这 N 个数字中连续 k (k ≤ N)个数字之和的最大值。

分析与思路

设数字放到数组 numArr 中从第 1 个元素 numArr[0] 开始,求出连续 k 个数字(numArr[0]、numArr[1] …… numArr[ k - 1])之和,记录下来,设为 tmpSum。设连续 k 个数字之和最大值为 maxSum,初始复制为 maxSum = tmpSum。然后,向右滑动数字块一位,在 即 tmpSum - numArr[0] + numArr[ k ],如果它大于 maxSum,则给 maxSum 赋新值,直至遍历完所有的数字。

此方法只需要遍历一次数组,时间复杂度为 O(n),空间复杂度为 O(1)。


代码实现

Java代码

import java.util.Scanner;

/**
 * 阿里巴巴黄金宝箱
 * 
 * @since 2023.10.30
 * @version 0.1
 * @author Frank
 *
 */
public class AlibabaGoldBox5 {
    public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	while (sc.hasNext()) {
	    String input = sc.nextLine();
	    String[] inputArr = input.split(",");
	    int[] numbers = new int[inputArr.length];
	    for (int i = 0; i < numbers.length; i++) {
		numbers[i] = Integer.parseInt(inputArr[i]);
	    }
	    input = sc.nextLine();
	    int k = Integer.parseInt(input);
	    processAlibabaGoldBox5(k, numbers);
	}
    }

    private static void processAlibabaGoldBox5(int k, int[] numbers) {
	int tmpSum = 0;
	for (int i = 0; i < k; i++) {
	    tmpSum += numbers[i];
	}

	int maxSum = tmpSum;
	for (int i = 0; i < numbers.length - k; i++) {
	    tmpSum -= numbers[i];
	    tmpSum += numbers[i + k ];
	    if (tmpSum > maxSum) {
		maxSum = tmpSum;
	    }
	}
	System.out.println(maxSum);
    }

}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
    while (line = await readline()) {
        var inputArr = line.split(",");
        var numbers = new Array();
        for (var i = 0; i < inputArr.length; i++) {
            numbers[i] = parseInt(inputArr[i]);
        }

        line = await readline()
        var k = parseInt(line);

        processAlibabaGoldBox5(k, numbers);
    }
}();

function processAlibabaGoldBox5(k, numbers) {
    var tmpSum = 0;
    for (var i = 0; i < k; i++) {
        tmpSum += numbers[i];
    }

    var maxSum = tmpSum;
    for (var i = 0; i < numbers.length - k; i++) {
        tmpSum -= numbers[i];
        tmpSum += numbers[i + k];
        if (tmpSum > maxSum) {
            maxSum = tmpSum;
        }
    }
    console.log(maxSum);
}

(完)


http://www.niftyadmin.cn/n/5135087.html

相关文章

380. O(1) 时间插入、删除和获取随机元素(真随机数)

380. O(1) 时间插入、删除和获取随机元素 方案&#xff1a; 该题看似简单&#xff0c;但难点在于每个函数的时间复杂度均为o(1), 哈希表动态数组 哈希表查找元素是否存在&#xff0c;时间复杂度O(1), 动态数组可以随机访问下标进行存取操作。 原答案&#xff1a; #include <…

UC3845BD1R2G一款专门针对离线和 DC-DC 转换器应用 高性能电流模式PWM控制器

UC3845BD1R2G为高性能固定频率电流模式控制器。专门针对离线和 DC-DC 转换器应用而设计&#xff0c;提供了外部部件极少的成本高效方案。这些集成电路具有振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和高电流图腾柱输出&#xff0c;适用于驱动功率 MOSFET。还包括…

【LeetCode刷题日志】88.合并两个有序数组

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

电动汽车常说的CTP/CTB/CTC技术都有什么玄机?

“没有新词汇&#xff0c;不叫发布会”。随着电动汽车行业的迅速发展&#xff0c;许多专业到让人不明觉厉的“新词汇”也开始频频跃入大众视野。比如车企们在介绍电池时常说的CTP&#xff0c;CTB和CTC&#xff0c;就让人感到一头雾水。 它们究竟是什么&#xff1f;有什么作用&…

任正非说:扩张必须踩在坚实的基础上,擅自扩张只能是自杀。

嗨&#xff0c;你好&#xff01;这是华研荟【任正非说】系列的第23篇文章&#xff0c;让我们继续聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、要想赢&#xff0c;要么在剑法上高于人&#xff0c;要么在盾牌上坚于人。若果剑不如人&#xff0c;就要…

Java 项目 服务器 日志配置

最近 在搞一个0-1的项目 就想把 服务器日志配置 记录一下 我们使用的是 单体微服务项目 首先你需要一个xml <?xml version"1.0" encoding"UTF-8"?> <configuration><!--定义日志存放的位置--><springProperty scope"context&…

ElasticSearch 高级查询语法Query DSL实战

ES高级查询Query DSL ES中提供了一种强大的检索数据方式&#xff0c;这种检索方式称之为Query DSL&#xff08;Domain Specified Language 领域专用语言&#xff09; , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互&#xff0c;这种方式的丰富查…

智慧粮库挡粮门异动监测

我国以往粮食收储设施比较老化&#xff0c;如何减少粮食在存储运输过程中的人为因素&#xff0c;确保粮食安全&#xff0c;成为亟待解决的问题&#xff0c;为了减少粮食的损失&#xff0c;“智慧粮库”的建设在我国有着重要意义。“智慧粮库”充分利用物联网、人工智能等技术&a…