优秀网站建设公司,微科技h5制作网站,成都cim软件公司,浙江平安建设信息系统网站查找接口成功率最优时间段
题目描述 服务之间交换的接口成功率作为服务调用关键质量特性#xff0c;某个时间段内的接口失败率使用一个数组表示#xff0c;数组中每个元素都是单位时间内失败率数值#xff0c;数组中的数值为0~100的整数#xff0c;给定一个数值(minAverag…查找接口成功率最优时间段
题目描述 服务之间交换的接口成功率作为服务调用关键质量特性某个时间段内的接口失败率使用一个数组表示数组中每个元素都是单位时间内失败率数值数组中的数值为0~100的整数给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值即平均失败率小于等于 minAverageLost找出数组中最长时间段如果未找到则直接返回NULL。 输入描述: 输入有两行内容第一行为{minAverageLost}第二行为{数组}数组元素通过空格()分隔minAverageLost及数组中元素取值范围为0~100的整数数组元素的个数不会超过100个。 输出描述: 找出平均值小于等于minAverageLost的最长时间段输出数组下标对格式{beginIndex}-{endlndx}(下标从0开始)如果同时存在多个最长时间段则输出多个下标对且下标对之间使用空格()拼接多个下标对按下标从小到大排序。 示例1 输入 1 01234 输出 0-2 说明 A、输入解释:minAverageLost1,数组[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(); // 将字符串数组转换为整数数组ListString 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)); // 输出结果列表中的内容}}
}解题思路 我们的目标是找到一个或多个连续时间段这些时间段内的平均失败率低于或等于给定的容忍值。下面是算法的解题思路 从输入中读取平均失败率的容忍值和包含失败率的数组。将输入的字符串数组转换为整数数组方便后续计算。创建一个列表result来存储符合条件的时间段。使用两层循环遍历所有可能的时间段起始位置和结束位置 外层循环遍历可能的起始位置 i内层循环遍历以 i 为起始位置的所有可能结束位置 j在内层循环中计算从 i 到 j 的失败次数总和 sum然后计算平均失败率 average如果 average 小于等于容忍值将当前时间段加入结果列表 result 中对结果列表进行排序。如果结果列表为空则输出 NULL否则输出结果列表中的内容。 这个算法的核心思想是通过两层循环遍历所有可能的时间段计算出每个时间段的平均失败率并找出符合条件的最长时间段。