华为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

相关文章

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四: