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

华为OD机考算法题:阿里巴巴找黄金宝箱(1)

题目部分

题目阿里巴巴找黄金宝箱(1)
难度
题目说明一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从 0 ~ N 的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。
黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和;第一个箱子左边部分的数字和定义为0;最后一个箱子右边部分的数字和定义为0。
请帮阿里巴巴找到黄金宝箱,输出第一个满足条件的黄金宝箱编号,如果不存在黄金宝箱,请返回 -1 。
输入描述箱子上贴的数字列表,使用逗号分隔,例如 1,-1,0。
宝箱的数量不小于 1 个,不超过 10000。
宝箱上贴的数值范围不低于 -1000,不超过 1000。
输出描述第一个黄金宝箱的编号。
补充说明
------------------------------------------------------
示例
示例1
输入2,5,-1,8,6
输出3
说明下标 3 之前的数字之和为: 2 + 5 + (-1) = 6。
下标 3 之后的数字之和为: 6。
示例2
输入8,9
输出-1
说明不存在符合要求的位置。
示例2
输入11
输出0
说明下标 0 之前的数字之和为: 0。
下标 0 之后的数字之和为: 0。


解读与分析

题目解读

一组整型数字,找出一个数字的下标,使其左边的数字之和等于右边数字之和。如果找不到输出 -1。

分析与思路

此题思路比较简单,先计算所有数字之和,然后从小到大逐个遍历数字下标。在遍历过程中,如果下标左边的数字之和和下标右边的数字之和相等,则输出其下标。如果遍历完后,仍旧找不到,则输出 -1。

在遍历过程中,求左右之和时,只需要根据前一个下标的和计算增量即可,不需要全量计算。

在计算过程中,会遍历 2 次整型数字,第一次求和,第一次寻找符合要求的下标。时间复杂度为 O(n),空间复杂度为 O(n)。


代码实现

Java代码

import java.util.Scanner;/*** 阿里巴巴找黄金宝箱(1)* @since 2023.10.11* @version 0.1* @author Frank**/
public class AlibabaFindGold1 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();String[] strNumber = input.split( "," );processAlibabaFindGold1( strNumber );}}private static void processAlibabaFindGold1( String[] strNumber ){int sum = 0;int[] numbers = new int[strNumber.length];for( int i = 0; i < strNumber.length; i ++ ){numbers[i] = Integer.parseInt( strNumber[i] );sum += numbers[i];}int leftSum = 0;int rightSum = sum;for( int i = 0; i < numbers.length; i ++ ){if( i >= 1 ){leftSum += numbers[ i - 1 ];}			rightSum -= numbers[i];if( leftSum == rightSum ){System.out.println( i );return;}}System.out.println( -1 );}
}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var strNumber = line.split(",");processAlibabaFindGold1(strNumber);}
}();function processAlibabaFindGold1(strNumber) {var sum = 0;var numbers = new Array( strNumber.length );for (var i = 0; i < strNumber.length; i++) {numbers[i] = parseInt(strNumber[i]);sum += numbers[i];}var leftSum = 0;var rightSum = sum;for (var i = 0; i < numbers.length; i++) {if (i >= 1) {leftSum += numbers[i - 1];}rightSum -= numbers[i];if (leftSum == rightSum) {console.log(i);return;}}console.log(-1);
}

(完)

http://www.lryc.cn/news/189393.html

相关文章:

  • 【JAVA版本】websocket获取B站直播弹幕——基于直播开放平台
  • Vue中的监视属性
  • 汽车一键启动点火开关按键一键启动按钮型号规格
  • 快速学习微服务保护框架--Sentinel
  • bootz启动 Linux内核过程总结
  • 前端项目--尚医通学习分享
  • 【Python】QTreeWidget树形结构添加
  • day 2 2.3.2 类和对象
  • vscode虚拟环境使用jupyter
  • Maven 依赖管理
  • 【踩坑】hive脚本笛卡尔积严重降低查询效率问题
  • 【C进阶】内存函数
  • h2database BTree 设计实现与查询优化思考
  • Linux命令(100)之sz
  • Insight h2database SQL like 查询
  • wpf中listview内容居中显示
  • 第二章 C++的输出
  • Qt中常用容器组控件介绍和实操
  • kafka、rabbitmq 、rocketmq的区别
  • java的amazonaws接口出现无法执行http请求:管道中断
  • cmake 多线程编译 指定 Visual Studio 编译器 命令行
  • 将 mysql 数据迁移到 clickhouse (最新版)
  • LeetCode 69.x的平方
  • 【小白入门】ASP.NET Core 创建 Web API
  • 如何使用摩尔信使MThings连接网络设备
  • 2023自动驾驶 车道线检测数据集
  • 排序算法-冒泡排序法(BubbleSort)
  • 3d tiles规范boundingVolume属性学习
  • 【开题报告】如何借助chatgpt完成毕业论文开题报告
  • 微信小程序通过 movable-area 做一个与vuedraggable相似的上下拖动排序控件