华为OD机试真题-查找接口成功率最优时间段

查找接口成功率最优时间段

题目描述

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于 minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。

输入描述:

输入有两行内容,第一行为{minAverageLost},第二行为{数组},数组元素通过空格("")分隔,minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个。


输出描述:

找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endlndx}(下标从0开始),如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格("")拼接,多个下标对按下标从小到大排序。

示例1

输入 

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

Java实现

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入的平均失败率容忍值和数组
        int minAverageLost = Integer.parseInt(scanner.nextLine()); // 读取平均失败率容忍值
        String[] rates = scanner.nextLine().split(" "); // 读取包含失败率的字符串并分割成数组
        
        int[] failures = Arrays.stream(rates).mapToInt(Integer::parseInt).toArray(); // 将字符串数组转换为整数数组
        
        List<String> result = new ArrayList<>(); // 用于存储结果的列表
        
        // 外层循环,遍历所有可能的起始位置
        for (int i = 0; i < failures.length; i++) {
            int sum = 0;
            // 内层循环,计算以当前起始位置开始的所有可能时间段
            for (int j = i; j < failures.length; j++) {
                sum += failures[j]; // 计算当前时间段内的失败次数总和
                double average = (double) sum / (j - i + 1); // 计算当前时间段的平均失败率
                if (average <= minAverageLost) { // 如果平均失败率小于等于容忍值
                    if (result.isEmpty() || (j - i) > (Integer.parseInt(result.get(0).split("-")[1]) - Integer.parseInt(result.get(0).split("-")[0]))) {
                        // 如果找到的时间段更长,则更新结果
                        result.clear(); // 清空结果列表
                        result.add(i + "-" + j); // 将当前时间段加入结果列表
                    } else if ((j - i) == (Integer.parseInt(result.get(0).split("-")[1]) - Integer.parseInt(result.get(0).split("-")[0]))) {
                        // 如果找到的时间段与已有最长时间段等长,则将其加入结果列表
                        result.add(i + "-" + j);
                    }
                }
            }
        }
        
        Collections.sort(result); // 对结果列表进行排序
        
        if (result.isEmpty()) {
            System.out.println("NULL"); // 如果结果列表为空,则输出"NULL"
        } else {
            System.out.println(String.join(" ", result)); // 输出结果列表中的内容
        }
    }
}

 解题思路:

我们的目标是找到一个或多个连续时间段,这些时间段内的平均失败率低于或等于给定的容忍值。下面是算法的解题思路:

  1. 从输入中读取平均失败率的容忍值和包含失败率的数组。
  2. 将输入的字符串数组转换为整数数组,方便后续计算。
  3. 创建一个列表(result)来存储符合条件的时间段。
  4. 使用两层循环遍历所有可能的时间段起始位置和结束位置:
    • 外层循环遍历可能的起始位置 i
    • 内层循环遍历以 i 为起始位置的所有可能结束位置 j
    • 在内层循环中,计算从 i 到 j 的失败次数总和 sum,然后计算平均失败率 average
    • 如果 average 小于等于容忍值,将当前时间段加入结果列表 result 中
  5. 对结果列表进行排序。
  6. 如果结果列表为空,则输出 "NULL";否则,输出结果列表中的内容。

这个算法的核心思想是通过两层循环遍历所有可能的时间段,计算出每个时间段的平均失败率,并找出符合条件的最长时间段。


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

相关文章

【开源】SpringBoot框架开发河南软件客服系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

备考银行科技岗刷题笔记(持续更新版)

银行考试计算机部分复习 IEEE 802.11的帧格式 1.1 IEEE 802.11是什么&#xff1f; 802.11是国际电工电子工程学会&#xff08;IEEE&#xff09;为无线局域网络制定的标准。目前在802.11的基础上开发出了802.11a、802.11b、802.11g、802.11n、802.11ac。并且为了保证802.11更…

Vue3:toRef和toRefs的用法

一、情景说明 我们知道&#xff0c;Vue3中想要定义对象类型的响应式数据 可以通过reactive函数实现 如果&#xff0c;后端返回的对象&#xff0c;有很多的字段&#xff0c;我们想进行结构化赋值 但是&#xff0c;又想保证赋值后的变量也是响应式数据 那么&#xff0c;这个时候…

深入揭秘Lucene:全面解析其原理与应用场景(一)

本系列文章简介&#xff1a; 本系列文章将深入揭秘Lucene&#xff0c;全面解析其原理与应用场景。我们将从Lucene的基本概念和核心组件开始&#xff0c;逐步介绍Lucene的索引原理、搜索算法以及性能优化策略。通过阅读本文&#xff0c;读者将会对Lucene的工作原理有更深入的了解…

初阶数据结构之---二叉树的顺序结构-堆

引言 今天要讲的堆&#xff0c;不是操作系统虚拟进程地址空间中&#xff08;malloc&#xff0c;realloc等开空间的位置&#xff09;的那个堆&#xff0c;而是数据结构中的堆&#xff0c;它们虽然名字相同&#xff0c;却是截然不同的两个概念。堆的底层其实是完全二叉树&#x…

从秒到年:打造与过去日期相关的智能显示

如何格式化过去的日期&#xff1f; 在前端开发中&#xff0c;经常会遇到需要将过去的日期转换成易读的形式&#xff0c;比如"刚刚"、“几分钟前”、"几小时前"等。为了方便处理这种情况&#xff0c;我们可以使用一个自定义的JavaScript方法来实现日期的格…

Docker_搭建跨服务器网络通讯(swarm 集群)

本文目录 一、如何搭建docker的跨服务器网络1、在主服务器上初始化docker swarm 集群2、其他服务器节点加入到创建好的集群中3、检验集群是否搭建成功4、创建overlay类型的docker网络 二、如何部署服务1、docker部署2、docker-compose部署 一、如何搭建docker的跨服务器网络 1…

css 背景图片居中显示

background 简写 background: #ffffff url(https://profile-avatar.csdnimg.cn/b9abdd57de464582860bf8ade52373b6_misnice.jpg) center center / 100% no-repeat;效果如图&#xff1a;