华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
给定一个由若干个整数组成的数组nums,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值,计算这两个值得差值,请输出所有分割方案中,差值最大的值。
第一行输入数组中的元素个数n,1 < n <= 100000
第二行输入数字序列,以空格进行分割,数字取值为4字节整数。
输出差值的最大取值。
在数组内的任意位置进行分割,左右两边各若干个数,再对两遍的数进行求和,求出差值的最大值。
差值的最大值,应该是大数减小数,是一个正数,故取差值的绝对值。
这道题相对来说还是比较简单的,三分钟拿下?
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);
}
5
5 7 2 3 10
17
将数组5 7 2 3 10两边分割成两个数组,通过暴力算法求出差值的最大取值。
哪个最大,一目了然!
下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。