当前位置: 首页 > article >正文

华为OD E卷(100分)54-查找接口成功率最优时间段

前言

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

题目描述

        服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示。

        数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost.找出数组中最长时间段,如果未找到则直接返回NULL。

输入描述

        有两行内容,

  • 第一行为 minAverageLost,
  • 第二行为数组,数组元素通过空格(" ")分隔, minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个

输出描述

        找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endIndex} (下标从0开始),

        如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(” “)拼接,多个下标对按下标从小到大排序。

示例1

输入:
1
0 1 2 3 4

输出:
0-2

说明:
A、输入解释:minAverageLost=1,数组[0, 1, 2, 3, 4]
B、前3个元素的平均值为1,因此数组第一个至第三个数组下标,即0-2

示例2

输入:
2
0 0 100 2 2 99 0 2

输出:
0-1 3-4 6-7

说明:
A、输入解释:minAverageLost=2,数组[0, 0, 100, 2, 2, 99, 0, 2]
B、通过计算小于等于2的最长时间段为:数组下标为0-1即[0, 0],数组下标为3-4即[2, 2],数组下标为6-7即[0, 2],这三个部分都满足平均值小于等2的要求,因此输出0-1 3-4 6-7

题解

Java实现

package huawei.e100;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
* @author arnold
* @date 2025年1月13日
* 查找接口成功率最优时间段
* 
*/
public class T54 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int minAverageLost = sc.nextInt();
			sc.nextLine();
			String[] data = sc.nextLine().split(" ");
			int[] d = new int[data.length];
			for (int i = 0; i < d.length; i++) {
				if (data[i].trim().length() >0) {
					d[i] = Integer.parseInt(data[i].trim());
				}
			}
			run(d, minAverageLost);
		}
	}
	
	static void run(int[] data, int minAverageLost) {
		Map<Integer, List<String>> res = new HashMap<Integer, List<String>>();
		for (int i = 0; i < data.length; i++) {
			int sum= data[i];
			for (int j = i+1; j < data.length; j++) {
				sum += data[j];
				int avg = sum/(j-i+1);
				if(avg <= minAverageLost) {
					int len = j-i +1;
					if(res.containsKey(len)) {
						
						res.get(len).add(i+ "-" + j);
					} else {
						 List<String> item = new ArrayList<String>();
						 item.add(i+ "-" + j);
						res.put(len, item);
					}
				}
			}
		}
		
		int maxLen = 0;
		for(Integer k : res.keySet()) {
			if (k> maxLen) {
				maxLen = k;
			}
		}
		System.out.println(String.join(" ", res.get(maxLen)));
	}

}


http://www.kler.cn/a/502616.html

相关文章:

  • Http 响应状态码 前后端联调
  • C++基础入门
  • 5、波分复用 WDM
  • Cython全教程2 多种定义方式
  • primitive 的 Appearance编写着色器材质
  • 计算机网络 (39)TCP的运输连接管理
  • 如何查看当前所处的git分支以及当前git分支与远程仓库中的哪个分支关联
  • gesp(C++五级)(2)洛谷:B3951:[GESP样题 五级] 小杨的队列
  • Lianwei 安全周报|2025.1.13
  • 网络协议ip表示,网络协议中ip表示
  • 浅谈云计算09 | 服务器虚拟化
  • 代码随想录算法【Day18】
  • 《大型语言模型与强化学习的融合:探索问题的新解决方案与开源验证需求》
  • 昵称 校验
  • 深度可分离卷积在卷积神经网络中的作用
  • mobaxterm内置编辑器中文出现乱码如何解决:直接更换编辑器为本地编辑器
  • 数据处理之计算文本相似度|余弦相似度|欧氏距离
  • 从 PostgreSQL 中挽救损坏的表
  • Linux-shell练习
  • Kafka集群数据完整性保障:有效防止数据丢失
  • Bert及Deberta、Roberta的简介
  • mongoDB全量备份和恢复
  • 前端笔记----
  • PPT素材免费下载
  • 利用ffmpeg将视频转为m3u8并加密
  • 通过Apache、Nginx限制直接访问public下的静态文件