华为OD刷题C卷 - 每日刷题 19(查找接口成功率最优时间段、最大N个数与最小N个数的和)

本文主要是介绍华为OD刷题C卷 - 每日刷题 19(查找接口成功率最优时间段、最大N个数与最小N个数的和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、(查找接口成功率最优时间段):

这段代码是解决“查找接口成功率最优时间段”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个辅助方法getSum,用于找出数组中最长的时间段,该时间段内的平均失败率小于等于给定的容忍值minAverageLost

main方法首先读取失败率容忍值minAverageLost和失败率数组arr,然后调用getResult方法并打印满足条件的最长时间段的下标对。

getResult方法使用双层循环遍历数组arr的所有可能子区间,通过getSum方法计算每个子区间的和,然后根据和与容忍值minAverageLost的关系来判断该子区间是否满足条件。如果满足条件,就更新最长时间段的记录,并存储下标对。最后,将所有满足条件的最长时间段的下标对按从小到大排序并返回。

getSum方法用于计算数组arr从索引startend的元素之和。

2、(最大N个数与最小N个数的和):

这段代码是解决“最大N个数与最小N个数的和”的问题。它提供了一个Java类Main,其中包含main方法和getSum方法,用于计算数组中最大N个数与最小N个数的和,同时需要对数组进行去重。

main方法首先读取数组的大小M和数组内容,然后读取需要计算的个数N,接着调用getSum方法并打印结果。

getSum方法首先检查输入的合法性,包括数组是否为空、数字是否在指定范围内。然后,使用HashSet对数组进行去重,并检查去重后的集合大小是否小于2 * N,如果是,则返回-1表示输入非法。接着,将去重后的集合转换为列表并排序。最后,使用双指针技术计算最大N个数与最小N个数的和。

package OD282;import java.util.*;/*** @description 查找接口成功率最优时间段* @level 6* @score 100*//*** 题目描述* 服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,* <p>* 数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,* <p>* 给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,* <p>* 找出数组中最长时间段,如果未找到则直接返回NULL。* <p>* 输入描述* 输入有两行内容,第一行为{minAverageLost},第二行为{数组},数组元素通过空格(” “)分隔,* <p>* minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个。* <p>* 输出描述* 找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endIndx}(下标从0开始),* <p>* 如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(” “)拼接,多个下标对按下标从小到大排序。*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//minAverageLostint minAverageLost = Integer.parseInt(sc.nextLine());int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();System.out.println(getResult(arr, minAverageLost));}//找出平均值小于等于n的最长时间段,输出对应下标 如0-1 3-4 多个下标对按从小到大排序public static String getResult(int[] arr, int minAverageLost) {//存放最长时间段 可以有多个List<int[]> list = new ArrayList<>();//初始化最大长度int maxLen = 0;for (int i = 0; i < arr.length; i++) {for (int j = i; j < arr.length; j++) {//区间[i,j]的和int sum = getSum(arr, i, j);int len = j - i + 1;int lost = len * minAverageLost;if (sum <= lost) {//如果len>maxLen 则清空list,并添加最新的,重置maxLen//如果len=maxLen,则直接添加进listif (len >= maxLen) {if (len > maxLen) {//清空之前maxLen长度的listlist.clear();}//然后再添加list.add(new int[]{i, j});maxLen = len;}}}}//未找到则返回NULLif (list.isEmpty()) {return "NULL";}//按开始下标升序排序list.sort(Comparator.comparingInt(a -> a[0]));//添加进结果StringJoiner sj = new StringJoiner(" ");list.forEach(t -> sj.add(t[0] + "-" + t[1]));//for (int[] temp : list) {//    sj.add(temp[0] + "-" + temp[1]);//}return sj.toString();}//从数组中start加到end位置的和public static int getSum(int[] arr, int start, int end) {int sum = 0;for (int i = start; i <= end; i++) {sum += arr[i];}return sum;}
}
package OD283;import java.util.*;/*** @description 最大N个数与最小N个数的和* @level 6*//*** 题目描述* 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。* <p>* 说明:* <p>* 数组中数字范围[0, 1000]* 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1* 输入非法返回-1* 输入描述* 第一行输入M, M标识数组大小* 第二行输入M个数,标识数组内容* 第三行输入N,N表达需要计算的最大、最小N个数* 输出描述* 输出最大N个数与最小N个数的和*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//数字个数int m = Integer.parseInt(sc.nextLine());int[] arr = new int[m];for (int i = 0; i < m; i++) {arr[i] = sc.nextInt();}//最大最小个数int n = sc.nextInt();System.out.println(getSum(arr, n));}//返回数组中最大最小n个数的和,有重叠返回-1public static int getSum(int[] arr, int n) {if (arr == null || arr.length == 0 || n <= 0) {return -1;}//数字范围为0-1000Set<Integer> set = new HashSet<>();for (int num : arr) {if (num < 0 || num > 1000) {return -1;}set.add(num);}//去重后如果set的大小小于2n,则一定会重叠if (set.size() < 2 * n) {return -1;}//排序set中的数List<Integer> list = new ArrayList<>(set);Collections.sort(list);//最大最小n个数的和int ans = 0;//左指针int l = 0;//右指针int r = list.size() - 1;while (n > 0) {ans += list.get(l) + list.get(r);l++;r--;n--;}return ans;}
}

这篇关于华为OD刷题C卷 - 每日刷题 19(查找接口成功率最优时间段、最大N个数与最小N个数的和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045558

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll