华为机试真题Java 实现【日志首次上报最多积分】【2022.11 Q4】

题目描述

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

如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一次上报的条数太多,会导致超时失败。为此,项目组设计了如下的上报策略:

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 7 40 10 60

输出

37

说明:

T1 时刻上报得 3 分

T2 时刻上报得 7 分

T3 时刻上报得 37 分,最大

T4 时刻上报得 -3 分

T5 时刻上报,因为已经超了100条的限制,所以只能上报100条,得 -23 分

个人解法

不保证通过率

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int max = 0;
        String[] split = br.readLine().split(" ");
        int[] input = new int[split.length];
        for (int i = 0; i < split.length; i++) {
            input[i] = Integer.parseInt(split[i]);
        }
        for (int i = 0; i < split.length; i++) {
            int temp = 0;
            int fen = 0;
            for (int j = 0; j <= i; j++) {
                fen -= input[j] * (i - j);
                fen += input[j];
                temp += input[j];
                if (temp > 100) {
                    fen -= temp - 100;
                    temp = 0;
                }
            }
            max = Math.max(fen, max);
        }
        System.out.println(max);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值