华为OD机试真题【日志首次上报最多积分】

news/2024/7/20 16:37:38 标签: 华为od, 算法, 贪心算法, 动态规划, JAVA

1、题目描述

【日志首次上报最多积分】

日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。

如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;

如果一次上报的条数太多,会导致超时失败。为此,项目组设计了如下的上报策略:

1、每成功上报一条日志,奖励1分
2、每条日志每延迟上报1秒,扣1分
3、积累日志达到100条,必须立即上报
给出日志序列,根据该规则,计算首次上报能获得的最多积分数。

【输入描述】
按时序产生的日志条数 T1,T2…Tn,其中 1<=n<=1000,0<=Ti<=100

【输出描述】
首次上报最多能获得的积分数

【示例1】
输入
1 98 1

输出
98

说明
T1 时刻上报得 1 分
T2 时刻上报得98分,最大
T3 时刻上报得 0 分

2、解题思路

个人感觉该题比较像贪心算法的题型,网上看着有说是动态规划的。
在这里插入图片描述

3、参考代码

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class 日志首次上报最多积分 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            List<Integer> logs = Arrays.stream(in.nextLine().split(" "))
                    .map(Integer::parseInt)
                    .collect(Collectors.toList());

            int[] accLogs = new int[logs.size()];
            accLogs[0] = logs.get(0);

            int[] penaltyScore = new int[logs.size()];
            penaltyScore[0] = 0;

            int[] totalScore = new int[logs.size()];

            for (int i = 1; i < logs.size(); i++) {
                // 计算累计日志数量,不能超过100
                accLogs[i] = Math.min(100, accLogs[i - 1] + logs.get(i));
                // 计算惩罚分数,每延迟上报1秒,扣1分
                penaltyScore[i] = penaltyScore[i - 1] + accLogs[i - 1];
                // 计算惩罚分数,总分数 = 累计日志数量 - 惩罚分数
                totalScore[i] = accLogs[i] - penaltyScore[i];

                // 如果日志数量大于等于100,停止遍历
                if (accLogs[i] >= 100) {
                    break;
                }
            }
            int maxScore = 0;
            for(int item : totalScore) {
                if (item > maxScore) {
                    maxScore = item;
                }
            }

            System.out.println(maxScore);
        }
    }

}

4、相似题目

(1)最大利润


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

相关文章

买电脑注意事项之CPU型号后面的字母都代表什么意思

在 CPU 型号后面的字母通常表示该 CPU 的一些特性或用途。不同的字母可能代表不同的系列、性能级别、功耗特性等。以下是一些常见的 CPU 后缀字母及其可能的含义&#xff1a; U&#xff08;例如&#xff1a;i5-8250U&#xff09;: Ultra Low Power&#xff1a;表示低功耗&#…

Unknown custom element:<xxx>-did you register the component correctly解决方案

如图所示控制台发现了爆红&#xff08;大哭&#xff09;&#xff1a; 报错解释&#xff1a; 当我们看到报错时&#xff0c;我们需要看到一些关键词&#xff0c;比如显眼的“component”和“name”这两个单词&#xff0c; 因此我们就从此处切入&#xff0c;大概与组件有关系。…

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件&#xff0c;想要提取其中的音频却苦于没有合适的工具&#xff1f;现在&#xff0c;有了我们的全新视频剪辑工具&#xff0c;这个烦恼全部消失&#xff01;我们为你提供一键式解决方案&#xff0c;将MOV视频文件快速转换为MP3音频格式。 首先…

前端面试题-JavaScriptl原型,原型链?有什么特点?(2024.2.2)

一、先理解下构造函数&#xff0c;实例对象 &#xff08;看代码的打印结果和解释&#xff09; 构造函数&#xff08;Constructor&#xff09;的 prototype 属性&#xff1a; 当你创建一个函数时&#xff0c;JavaScript 会自动为该函数创建一个 prototype 属性。这个 prototype …

大数据-Spark-关于Json数据格式的数据的处理与练习

上一篇&#xff1a; 大数据-MapReduce-关于Json数据格式的数据的处理与练习-CSDN博客 16.7 Json在Spark中的引用 依旧利用上篇的数据去获取每部电影的平均分 {"mid":1,"rate":6,"uid":"u001","ts":15632433243} {"m…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

接口自动化测试中解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

XML要点总结

一、XML 技术用于解决什么问题 ● 解决程序间数据传输的问题&#xff1a; > json 比如 qq 之间的数据传送&#xff0c;用 xml 格式来传送数据&#xff0c;具有良好的可读性&#xff0c;可维护性。 ● xml 可以做 配置文件 xml 文件做配置文件可以说非常的普遍&am…