华为OD机试真题——查找接口成功率最优时间段(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

article/2025/8/3 1:48:25

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

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


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:查找接口成功率最优时间段


知识点: 滑动窗口、前缀和、逻辑处理
时间限制: 1秒
空间限制: 256MB
限定语言: 不限


题目描述

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

输入描述

  • 第一行为minAverageLost
  • 第二行为数组,元素通过空格分隔。
  • minAverageLost及数组元素取值范围为0~100的整数,数组长度不超过100。

输出描述

  • 输出所有满足条件的最长时间段下标对,格式为{beginIndex}-{endIndex}(下标从0开始)。
  • 若存在多个相同长度的最优时间段,按起始下标从小到大排序,并用空格拼接。

用例

  1. 输入

    1  
    0 1 2 3 4  
    

    输出

    0-2  
    

    说明:前3个元素的平均值为1,满足条件。

  2. 输入

    2  
    0 0 100 2 2 99 0 2  
    

    输出

    0-1 3-4 6-7  
    

    说明:下标0-1、3-4、6-7对应的子数组平均值均≤2,且均为最长时段。


Java

问题分析

我们需要找到数组中所有满足平均失败率小于等于给定值的最长连续子数组,并输出这些子数组的起始和结束下标。如果有多个相同长度的子数组,按起始下标升序排列。

解题思路

  1. 转换数组:将每个元素减去给定的平均失败率,问题转化为寻找子数组的和小于等于0的最长长度。
  2. 前缀和数组:计算转换后数组的前缀和,便于快速计算子数组的和。
  3. 遍历所有可能的子数组:对于每个可能的结束下标,遍历所有可能的起始下标,记录满足条件的最长子数组。
  4. 收集结果:记录所有最长的子数组,按起始下标排序后输出。

代码实现

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[] parts = scanner.nextLine().split(" ");int[] nums = new int[parts.length];for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);}// 转换为每个元素减去minAverageLost的数组int[] b = new int[nums.length];for (int i = 0; i < nums.length; i++) {b[i] = nums[i] - minAverageLost;}// 计算前缀和数组int[] prefixSum = new int[b.length + 1];for (int i = 0; i < b.length; i++) {prefixSum[i + 1] = prefixSum[i] + b[i];}int maxLen = 0;List<int[]> result = new ArrayList<>();// 遍历所有可能的结束下标jfor (int j = 0; j < b.length; j++) {// 遍历所有可能的起始下标ifor (int i = 0; i <= j; i++) {// 检查子数组i到j的和是否<=0if (prefixSum[j + 1] <= prefixSum[i]) {int currentLen = j - i + 1;if (currentLen > maxLen) {maxLen = currentLen;result.clear();result.add(new int[]{i, j});} else if (currentLen == maxLen) {result.add(new int[]{i, j});}}}}if (maxLen == 0) {System.out.println("NULL");return;}// 按起始下标排序Collections.sort(result, (a, bArr) -> {if (a[0] != bArr[0]) {return a[0] - bArr[0];} else {return a[1] - bArr[1];}});// 使用LinkedHashSet去重并保持顺序LinkedHashSet<String> seen = new LinkedHashSet<>();for (int[] interval : result) {seen.add(interval[0] + "-" + interval[1]);}// 输出结果System.out.println(String.join(" ", seen));}
}

代码详细解析

  1. 输入处理:读取输入的平均失败率和数组。
  2. 数组转换:将每个元素减去平均失败率,转换为新数组b
  3. 前缀和计算:构建前缀和数组prefixSum,用于快速计算子数组的和。
  4. 遍历子数组:双重循环遍历所有可能的起始和结束下标,检查子数组的和是否满足条件。
  5. 记录最长子数组:动态更新最长长度,并记录所有符合条件的子数组。
  6. 结果排序与去重:按起始下标排序,使用LinkedHashSet去重并保持顺序。
  7. 输出结果:拼接结果字符串并输出。

示例测试

示例1输入:
1  
0 1 2 3 4  

输出:

0-2
示例2输入:
2  
0 0 100 2 2 99 0 2  

输出:

0-1 3-4 6-7  
示例3输入:
3  
1 1 1  

输出:

0-2

综合分析

  1. 时间复杂度:O(n²),遍历所有可能的子数组,适用于数组长度较小的情况(n ≤ 100)。
  2. 空间复杂度:O(n),存储前缀和数组和结果列表。
  3. 优势:利用前缀和数组快速计算子数组的和,确保正确性和效率。
  4. 适用场景:适用于需要查找连续子数组满足特定条件的场景,如平均值、和等限制。

python

问题分析

我们需要找到数组中所有满足平均失败率 ≤ 给定值的最长连续子数组,并输出这些子数组的起始和结束下标。如果有多个相同长度的子数组,按起始下标升序排列。


解题思路

  1. 数学转换
    将问题转换为:寻找子数组的和 ≤ 0 的最长连续区间(原数组每个元素减去平均值后的新数组)。

  2. 前缀和数组
    计算新数组的前缀和,利用前缀和快速判断子数组的和是否 ≤ 0。

  3. 暴力遍历
    遍历所有可能的子数组,记录满足条件的最长区间。

  4. 结果处理
    去重并排序结果,按指定格式输出。


代码实现

def main():import sysinput = sys.stdin.read().splitlines()min_avg = int(input[0].strip())  # 读取容忍值arr = list(map(int, input[1].strip().split()))  # 读取失败率数组# 转换为差值数组(元素 - 容忍值)diff = [num - min_avg for num in arr]n = len(diff)# 计算前缀和数组(多一位方便计算)prefix = [0] * (n + 1)for i in range(n):prefix[i+1] = prefix[i] + diff[i]max_len = 0result = []# 遍历所有可能的子数组for end in range(n):for start in range(end + 1):# 子数组和是否 <= 0(prefix[end+1] <= prefix[start])if prefix[end+1] <= prefix[start]:current_len = end - start + 1if current_len > max_len:max_len = current_lenresult = [(start, end)]elif current_len == max_len:result.append((start, end))if max_len == 0:print("NULL")return# 去重并排序(起始下标升序)unique = sorted(list(set(result)), key=lambda x: (x[0], x[1]))# 格式化输出output = ' '.join([f"{s

http://www.hkcw.cn/article/phMjyaxdWg.shtml

相关文章

硬件I2C和软件I2C的区别

硬件I2C和软件I2C的区别 一、硬件I2C 1、硬件IC的局限性及学习意义 尽管硬件IC外设在STM32等微控制器中提供了标准化的通信支持&#xff0c;但在实际应用中&#xff0c;其稳定性可能存在问题。例如&#xff0c;某些情况下外设会因事件检测异常而进入死锁状态&#xff0c;仅能…

PyCharm接入DeepSeek,实现高效AI编程

介绍本土AI工具DeepSeek如何结合PyCharm同样实现该功能。 一 DeepSeek API申请 首先进入DeepSeek官网&#xff1a;DeepSeek 官网 接着点击右上角的 “API 开放平台“ 然后点击API keys 创建好的API key&#xff0c;记得复制保存好 二 pycharm 接入deepseek 首先打开PyCh…

大模型-attention汇总解析之-MQA

MQA&#xff0c;即 “Multi-Query Attention”&#xff0c;是减少 KV Cache 的一次的一种大胆尝试&#xff0c;首次提出自《Fast Transformer Decoding: One Write-Head is All You Need》&#xff0c; 在2019 年减少 KV Cache 就已经是研究人员非常关注的一个课题了。MQA 的思…

华为OD机试真题——游戏分组王者荣耀(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

主流 AI IDE 之一的 Windsurf 使用入门

一、Windsurf 的常见入门界面 以上是本次展示Windsurf版本信息。 1.1 个人配置中心 1.2 AI 助手快捷设置 1.3 使用额度查看页面 1.4 智能助手 Windsurf 编辑器中 AI 助手名称 &#xff1a;Cascade 。打开 Cascade 窗口&#xff0c;开始聊天就可以了。方框里有写和聊两种状态锁…

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱

背景与问题概述 这一周&#xff08;2025-05-26-2026-05-30&#xff09;我在搞数据拟合修复优化的任务&#xff0c;有大量的数据需要进行数据处理及回写&#xff0c;大概一个表一天一分区有五六千万数据&#xff0c;大约一百多列的字段。 具体是这样的我先取档案&#x…

长尾关键词优化驱动SEO增长

内容概要 在搜索引擎优化领域&#xff0c;长尾关键词的精细化运营已成为突破流量瓶颈的核心突破口。相较于通用型关键词&#xff0c;长尾词凭借其低竞争度、高转化潜力的特性&#xff0c;能够精准捕捉用户搜索意图&#xff0c;为网站带来更具价值的自然流量。本文将从战略定位…

数字孪生驱动的智慧水务管网智能运维系统实践

引言&#xff1a;数字孪生赋能城市水务基础设施智能化转型 在新型智慧城市架构中&#xff0c;地下供水管网作为城市生命线工程&#xff0c;其数字化重构已成为市政基础设施现代化的核心命题。本文以某省会城市智慧水务示范项目为蓝本&#xff0c;系统阐述数字孪生技术在供水管…

数据资产——立法与实操指南

5月27日&#xff0c;数据资产一千零一夜&#xff0c;华东数交周二夜谈第三十三期圆满结束&#xff0c;上海国瓴律师事务所首席合伙人、管理委员会主席高慧、天册(上海)律师事务所律师邓亚军&#xff1b;数据宝网络科技有限公司数据资产研究院高级研究员王国辉共同围绕“数据资产…

放假带出门的充电宝买哪种好用耐用?倍思超能充35W了解一下!

端午节的到来和毕业季的临近&#xff0c;让很多人开始计划出游或长途旅行。而在旅途中&#xff0c;一款好用耐用的充电宝可以省不少事。今天&#xff0c;我们就来聊聊放假带出门的充电宝买哪种好用耐用&#xff0c;看看为什么倍思超能充35W更适合带出门~ 一、为什么需要一款好用…

ONLYOFFICE文档API:更强的安全功能

在数字化办公时代&#xff0c;文档的安全性与隐私保护已成为企业和个人用户的核心关切。如何确保信息在存储、传输及协作过程中的安全&#xff0c;是开发者与IT管理者亟需解决的问题。ONLYOFFICE作为一款功能强大的开源办公套件&#xff0c;不仅提供了高效的文档编辑与协作体验…

day14 leetcode-hot100-27(链表6)

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 1. 暴力法 思路 创建一个空节点&#xff0c;用来组装这两个链表&#xff0c;谁小谁就是下一个节点。 知识 创建空节点&#xff1a;ListNode n1 new ListNode(-1); 具体代码 /*** Definition for singly-l…

DALI DT6与DALI DT8介绍

“DT”全称Device Type&#xff0c;是DALI-2 标准协议中的IEC 62386-102(即为Part 102)部分对不同类型的控制设备进行一个区分。不同的Device Type代表不同特性的控制设备&#xff0c;也代表了这种控制设备拥有的扩展的特性。 在DALI&#xff08;数字可寻址照明接口&#xff09…

【自然语言处理】——基于与训练模型的方法【复习篇1】

本系列文章主要通过课本课后题目的方式来进行期末复习&#xff0c;很多知识分析的可能会比较浅&#xff0c;所以还请大佬们及时指正&#xff0c;我们可以在评论区讨论交流&#xff01; 2.1 基于规则与基于机器学习的自然语言处理方法分别有哪些优缺点&#xff1f; 【先总结来讲…

Golang——2、基本数据类型和运算符

基本数据类型和运算符 1、基本数据类型1.1、整形1.2、浮点型1.3、布尔值1.4、字符串1.5、byte和rune类型1.6、修改字符串 2、基本数据类型之间的转换2.1、数值类型之间的相互转换2.2、其他类型转换成string类型2.3、string类型转换成数值类型 3、Golang中的运算符3.1、算数运算…

服务器如何配置防火墙管理端口访问?

配置服务器防火墙来管理端口访问&#xff0c;是保障云服务器安全的核心步骤。下面我将根据你使用的不同操作系统&#xff08;Linux: Ubuntu/Debian/CentOS&#xff1b;Windows Server&#xff09;介绍常用防火墙配置方法。 ✅ 一、Linux 防火墙配置&#xff08;UFW / firewalld…

4.2.2 Spark SQL 默认数据源

在本实战概述中&#xff0c;我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先&#xff0c;我们了解了 Parquet 文件的存储特性&#xff0c;包括其二进制存储方式和内嵌的 Schema 信息。接着&#xff0c;通过一系列命令&#xff0c;我们演示了如何在 HDFS 上…

4.0/Q2,GBD数据库最新文章解读

文章题目&#xff1a;Global burden of Type 2 Diabetes Mellitus attributable to dietary risks in elderly adults: insights from the Global Burden of Disease study 2021 DOI&#xff1a;10.3389/fnut.2025.1557923 中文标题&#xff1a;老年人饮食风险导致的 2 型糖尿病…

mobile app 工具简要对比

支持mobile app UI自动化测试的工具比较多&#xff0c;其中使用时间很长&#xff0c;应用很广泛的有appium&#xff0c;前面博客也详细介绍过appium webdriverio工具的特点&#xff0c;此篇博客将介绍之前项目实际使用或者调研过的mobile app ui工具&#xff0c;最后再对多个工…

【Doris基础】Apache Doris业务场景全解析:从实时数仓到OLAP分析的完美选择

目录 1 Doris核心能力概述 2 实时数据分析场景 2.1 实时数据仓库 2.2 实时监控与告警 3 交互式OLAP分析场景 3.1 自助式BI分析 3.2 用户行为分析 4 大数据分析场景 4.1 日志分析系统 4.2 时序数据处理 5 Doris技术架构适配性分析 5.1 适合Doris的场景特征 5.2 不适合Doris的场景…