华为OD E卷(100分)07-日志采集

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述


        日志采集是运维系统的核心组件,日志是按行生成,每行记做一条,由采集系统分批上报。
上报策略的设计需要平衡多个因素:上报频率、服务端压力、用户体验以及避免超时失败。

        根据题目描述,项目组设计了以下上报策略:

  1. 奖励机制:每成功上报一条日志,奖励1分。
  2. 扣分机制:每条日志每延迟上报1秒,扣1分。
  3. 强制上报条件:积累日志达到100条时,必须立即上报。

         给出日志序列,根据该规则,计算首次上报能获得的最多积分数。

输入

        按时序产生的日志条数 T1​,T2​...Tn​, 其中 1≤n≤1000,0≤Ti​≤100

输出

        首次上报最多能获得的积分数

示例

输入:

1 98 1
输出:

98

解题思路

  1. 按上报策略计算产生即上报、逐次拖延、直到必须强制上报的得分数
  2. 取得分中的最大值

题解

java实现

package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月9日
* 
*/
public class T07 {
	
	private static int pull(String[] logNums) {
		int score = 0;
		int sum = 0;
		int maxScore = 0;
		for (int i = 0; i< logNums.length; i++) {
			int num = Integer.parseInt(logNums[i]);
			score = (score + num - sum) > 0 ? (score + num - sum) : 0;
			sum += num;
			maxScore = Math.max(maxScore, score);
			if (sum >= 100) {
				return maxScore;
			} 
			// 附加策略, 当分值被扣完后必须上报
			if (score == 0 && sum > 0) { return 0;}
		}
		return maxScore;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			String input = sc.nextLine();
			String[] logNums = input.split(" "); 
			int score = pull(logNums);
			System.out.println(score);
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

arnold66

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

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

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

打赏作者

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

抵扣说明:

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

余额充值