目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
一、题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。
黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字和;第一个箱子左边部分的数字和定义为0;最后一个宝箱右边部分的数字和定义为0。
请帮阿里巴巴找到黄金宝箱,输出第一个满足条件的黄金宝箱编号,如果不存在黄金宝箱,请返回-1。
二、输入描述
箱子上贴的数字列表,使用逗号分隔,例如1,-1,0。
宝箱的数量不小于1个,不超过10000
宝箱上贴的数值范围不低于-1000,不超过1000
三、输出描述
第一个黄金宝箱的编号。
四、解题思路
- 输入N个数字,逗号隔开,表示箱子数字;
- 计算数组的总和sum;
- 从第一个箱子开始遍历,计算左侧数字之和;
- 计算右侧数字之和;
- 计算一次,比较一次,直到找到第一个左侧数字之和等于右侧数字之和的数字,表示找到了黄金宝箱;
- 如果没找到,输出-1。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = sc.nextLine().split(",");
int[] nums = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
// 数组第一个元素的左侧和为0,最后一个元素的右侧和为0
int left = 0;
int right = 0;
for (int num : nums) {
// 数组的总和
right = right + num;
}
// 是否找到了黄金宝箱
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
if (i != 0) {
//左侧和做加法
left = left + nums[i - 1];
}
// 右侧和做减法
right = right - nums[i];
// 排在它之前的所有箱子数字和等于排在它之后的所有箱子数字和,找到了黄金宝箱
if (left == right) {
System.out.print(i);
flag = true;
break;
}
}
// 如果没找到,输出-1
if (!flag) {
System.out.println(-1);
}
}
六、效果展示
1、输入
1,5,9,10,10,2,3
2、输出
3
3、说明
下标3之前的数字和为:1 + 5 + 9 = 15
下标3之后的数字和为:10 + 2 + 3 = 15
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。