当前位置:首页 > 编程笔记 > 正文
已解决

【华为OD题库-004】阿里巴巴找黄金宝箱1-Java

来自网友在路上 183883提问 提问时间:2023-11-08 20:20:52阅读次数: 83

最佳答案 问答题库838位专家为你答疑解惑

题目

—贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从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=6
示例2
输入:
8,9
输出:
-1
说明:
不存在符合要求的位置
示例3
输入:
11
输出:
0
说明:
下标0之前的数字和为:0
下标0之后的数字和为:0

思路

以2,5,-1,8,6为例,从索引0开始(start=0,值为2)开始,此时2左边的和left=0,右边的和right=5-1+8+6=18。
通过不断右移start,更新left和right的值后,判断left和right是否相等
如果找到left和right相等,那么直接返回此时的start
如果start走到最后一个元素,left依然不等于right,那么直接返回-1
至于更新left和right的逻辑,通过观察很容易发现:
left+=arr[start],start为右移动前的位置索引
right-=arr[start+1]

题解

package hwod;import java.util.Arrays;
import java.util.Scanner;public class FindGoldBox {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] inputs=sc.nextLine().split(",");int[] boxs = Arrays.stream(inputs).mapToInt(Integer::parseInt).toArray();System.out.println(findGoldBox(boxs));}private static int findGoldBox(int[] boxs) {int start = 0, left = 0, right = 0;for (int i = 1; i < boxs.length; i++) {right += boxs[i];}while (left != right) {left += boxs[start];start++;if(start>=boxs.length) return -1;right -= boxs[start];}return start;}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【华为OD题库-004】阿里巴巴找黄金宝箱1-Java":http://eshow365.cn/6-35553-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!