华为OD机试真题 Java 实现【分割数组的最大差值】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

华为OD机试真题 Java 实现【分割数组的最大差值】【2023 B卷 100分】,附详细解题思路_第1张图片

一、题目描述

给定一个由若干个整数组成的数组nums,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值,计算这两个值得差值,请输出所有分割方案中,差值最大的值。

二、输入描述

第一行输入数组中的元素个数n,1 < n <= 100000

第二行输入数字序列,以空格进行分割,数字取值为4字节整数。

三、输出描述

输出差值的最大取值。

四、解题思路

在数组内的任意位置进行分割,左右两边各若干个数,再对两遍的数进行求和,求出差值的最大值。

差值的最大值,应该是大数减小数,是一个正数,故取差值的绝对值。

这道题相对来说还是比较简单的,三分钟拿下?

  1. 输入数组中的元素个数n;
  2. 输入数字序列,以空格进行分割;
  3. 定义左边之和leftSum,初始化为0;
  4. 定义右边之和rightSum,并初始化为当前数组之和;
  5. 定义变量差值的最大取值max;
  6. 使用暴力算法,计算左右两边数组的差值;
  7. 取最大差值;
  8. 输出差值的最大取值;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 数组中的元素个数n
    int n = Integer.parseInt(sc.nextLine());
    // 数字序列,以空格进行分割
    int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    // 左边之和
    long leftSum = 0;
    // 右边之和
    long rightSum = Arrays.stream(nums).sum();

    // 差值的最大取值
    long max = 0;

    // 暴力算法
    for (int i = 0; i < n - 1; i++) {
        leftSum += nums[i];
        rightSum -= nums[i];

        // 计算左右两边数组的差值
        long diff = Math.abs(leftSum - rightSum);
        // 取最大差值
        if (diff > max) {
            max = diff;
        }
    }
    // 输出差值的最大取值
    System.out.println(max);
}

六、效果展示

1、输入

5
5 7 2 3 10

2、输出

17

3、说明

将数组5 7 2 3 10两边分割成两个数组,通过暴力算法求出差值的最大取值。

  • 5 -(7 + 2 + 3 +10) = 17;
  • (5+7)-(2 + 3 + 10) = 3;
  • (5+7+2)-(3+10)=1;
  • (5+7+2+3)-10=7;

哪个最大,一目了然!

输出差值的最大取值17。
华为OD机试真题 Java 实现【分割数组的最大差值】【2023 B卷 100分】,附详细解题思路_第2张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,华为,程序人生,学习)