#24. 25年6月-华为实习-1.变换子数组最大和
题目描述
题解
题库
25年6月-华为实习-1.变换子数组最大和
题目内容
你有一个包含整数的数组 a,数组中的每个元素可以是正数、负数或零。
现在,你拥有一种特殊的能力:
- 你可以选择数组中的任意一段连续的子数组,并将这段子数组内的每个数字都变成其相反数。这个操作可以执行0次或1次。
你的任务是,利用这个特殊能力,找出在执行操作后能够达到的最大和的连续子数组。这里所指的“最大和”是指经过可能的变换操作后,任意连续子数组元素之和的最大值。需要注意的是,最终选择的子数组至少应包含一个元素。注意:取反的子数组跟最终求和的子数组并不需要相同。
输入描述
- 第一行包含一个整数 n (2 <= n <=10^5)),表示数组中数字的个数。
- 第二行包含 n个整数,依次为 a_1, a_2, ..., a_n (-10^4 <= a <= 10^4)
输出描述
输出一个整数,表示在执行操作后能够达到的最大和的连续子数组之和。
样例1
输入
6
3 1 -6 2 -5 3
输出
16
说明
首先选择 [-6, 2, -5] 进行变换,原数组变为 [3, 1, 6, -2, 5, 3],此时选择整个数组序列,可得最大总和为16。
样例2
输入
7
-1 -1 8 -9 7 -1 -1
输出
24
说明
首先选择子数组 [-9]进行变换,原数组变为 [-1, -1, 8, 9, 7, -1, -1],此时选择 [8, 9, 7]子数组,可得最大总和为24。
样例3
输入
5
1 3 4 2 5
输出
15
说明
首先不进行任何变换,然后此时选择整个数组序列,可得最大总和为15。