华为OD机考--阿里巴巴黄金箱

题目内容

贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子每个箱子上面贴有一个数字箱子中可能有一个黄金宝箱。

黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和;

一个箱子左边部分的数字和定义为0: 最后一个箱子右边部分的数字和定义为0.

帮阿里巴巴找到黄金宝箱,输出第一个满足条件的黄金宝箱编号,如果不存在黄金宝箱,请返回-1。

输入描述

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

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

输出描述

第一个黄金宝箱的编号

样例

输入

复制代码
2,5,-1,8,6

输出

复制代码
3

说明

下标3之前的数字和为:2+5+-1=6

下标3之后的数字和为:6=6

输入

复制代码
8,9

输出

复制代码
-1

说明

不存在符合要求的位置

输入

复制代码
11

输出

复制代码
0

说明

下标0之前的数字和为:0

下标0之后的数字和为:0

java 复制代码
public class GoldChest {
    public static void main(String[] args) {
        Scanner sc =  new Scanner(System.in);
        int [] num = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        if (num.length == 1){
            System.out.println(0);
            return;
        }
        int end = equal(num,1);
        System.out.println(end);
    }

    //单指针+循环遍历
    public static int equal(int [] num, int i){
        Boolean end = false;
        while (!end && i < num.length) {
            int before = 0;
            int after = 0;
            for (int j = 0; j < num.length; j++) {
                if (j < i) {
                    before += num[j];
                } else if (j > i) {
                    after += num[j];
                }
            }
            if (before == after) {
                end = true;
            } else {
                i++;
            }
        }
        if (!end) {
            return -1;
        }
        return i;
    }
}
相关推荐
孤狼warrior6 小时前
SCTR 五次失败的安全 BN 路由器
人工智能·python·深度学习·算法·安全·yolo
Wang's Blog6 小时前
Java框架快速入门: Spring Security+OAuth2之定制登录页
java·开发语言·spring
霸道流氓气质6 小时前
Spring AI vs Spring AI Alibaba:技术选型与平滑迁移策略
java·人工智能·spring
影视飓风TIM6 小时前
C++11 核心新特性完整梳理
数据结构·c++·算法
晴天的雨.9926 小时前
[C++]算法双指针 复写0
数据结构·c++·算法
拽着尾巴的鱼儿6 小时前
Idea:Cannot Run Git 无法运行git
java·git·intellij-idea
编程_大白6 小时前
IDEA配置SQL方言
java·sql·intellij-idea
橘子汽水1686 小时前
Leetcode 128,49最长连续序列,字母异位词分组
java·算法·leetcode
mmmmath_36 小时前
LeetCode.438.找到字符串中所有字母异位词
数据结构·算法·leetcode