当前位置: 首页 > news >正文

华为OD机试真题——阿里巴巴找黄金宝箱Ⅰ(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 100分 题型

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

华为OD机试真题《阿里巴巴找黄金宝箱Ⅰ》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:阿里巴巴找黄金宝箱Ⅰ


  1. 知识点:前缀和、双指针(或逻辑模拟)
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。
黄金宝箱满足:排在它之前的所有箱子数字和等于排在它之后的所有箱子数字和;

  • 第一个箱子左边部分的数字和定义为0;
  • 最后一个宝箱右边部分的数字和定义为0。
    请帮阿里巴巴找到黄金宝箱,输出第一个满足条件的黄金宝箱编号,如果不存在黄金宝箱,请返回-1。

输入描述
箱子上贴的数字列表,使用逗号分隔,例如:1,-1,0

  • 宝箱的数量不小于1个,不超过10000;
  • 宝箱上贴的数值范围不低于-1000,不超过1000。

输出描述
第一个黄金宝箱的编号(从0开始计数)。

示例

  1. 输入:2,5,-1,8,6,输出:3
    • 下标3之前的数字和为:2 + 5 + -1 = 6,之后的数字和为:6 = 6
  2. 输入:8,9,输出:-1(无满足条件的位置)。
  3. 输入:11,输出:0(下标0左右和均为0)。

Java

问题分析

我们需要找到数组中第一个满足左边元素和等于右边元素和的索引位置。左边和右边的定义分别为该位置前所有元素的和及该位置后所有元素的和。若不存在这样的位置,返回-1。

解题思路

  1. 总和计算:首先计算数组所有元素的总和。
  2. 遍历检查:遍历数组,维护一个累积的左边和 leftSum。对于每个位置 i,右边的和为 totalSum - leftSum - nums[i]。如果左边和等于右边的和,则返回当前索引。
  3. 线性时间复杂度:该方法只需两次遍历数组(一次计算总和,一次查找位置),时间复杂度为 O(n),空间复杂度为 O(1)(不考虑输入存储空间)。

代码实现

public class Main {public static void main(String[] args) {// 读取输入并转换为整数数组java.util.Scanner scanner = new java.util.Scanner(System.in);String input = scanner.nextLine();String[] parts = input.split(",");int[] nums = new int[parts.length];for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);}// 计算总和int totalSum = 0;for (int num : nums) {totalSum += num;}// 遍历数组查找黄金宝箱位置int leftSum = 0;for (int i = 0; i < nums.length; i++) {int current = nums[i];// 右边的和 = 总和 - 左边和 - 当前元素值int rightSum = totalSum - leftSum - current;if (leftSum == rightSum) {System.out.println(i);return;}leftSum += current;}// 未找到符合条件的宝箱System.out.println(-1);}
}

代码详解

  1. 输入处理

    • scanner.nextLine() 读取输入字符串。
    • split(",") 将字符串按逗号分割成字符串数组。
    • 转换为 int[] 数组 nums
  2. 总和计算

    • 遍历数组累加所有元素的值得到 totalSum
  3. 遍历检查

    • 初始化 leftSum 为0,表示当前位置左边的累积和。
    • 遍历每个元素 nums[i],计算右边的和 rightSum
    • 如果 leftSum 等于 rightSum,输出当前索引并结束程序。
    • 否则,将当前元素值加到 leftSum 中,继续下一个元素。
  4. 结果输出

    • 若遍历结束未找到符合条件的索引,输出-1。

示例测试

示例1
输入:2,5,-1,8,6
输出:3
解析:索引3左边和为2+5+(-1)=6,右边和为6,相等。

示例2
输入:8,9
输出:-1
解析:两个位置均不满足左边和等于右边和。

示例3
输入:11
输出:0
解析:左边和与右边和均为0。

综合分析

  1. 时间复杂度:两次遍历数组,时间复杂度为 O(n),n为数组长度。对于最大输入规模1e4,完全可行。

相关文章:

  • 禾纳ATE3156AP/ATE3156AS,P沟道增强型MOSFET,替代AO4805方案
  • [MMU]IOMMU的主要职能及详细的验证方案
  • 涨薪技术|0到1学会性能测试第90课-性能测试构建
  • 【Elasticsearch】suggest
  • GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)
  • AI生成思维导图全技术解析
  • 使用 pytesseract 构建一个简单 OCR demo
  • 湖北理元理律师事务所观察:债务优化如何成为民生安全网
  • 安装一个包 myPhysicsLab
  • WPF prism
  • 小表驱动大表更快吗,不是
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十一)
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁​
  • AI智能体|扣子(Coze)搭建【自动生成超高质量PPT】工作流
  • [ctfshow web入门] web79
  • C++进阶--C++11(04)
  • 三维可视化和实时数据处理对前端性能要求以及优化渲染效率
  • 【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
  • 零基础认知企业级数据分析平台如何落实数据建模(GAI)
  • 深圳的建站公司/谷歌google play下载
  • 成都哪里做网站/正规接单赚佣金的平台
  • 成都模板网站建设服务/提高基层治理效能
  • 海淀区社区建设网站/网站建设详细方案模板
  • 高质量的南京网站建设/seo学习
  • 网站推广实践内容/重庆白云seo整站优化