题目描述:
给定一个由若干整数组成的数组nums,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值,计算这两个值的差值,请输出所有分割方案中,差值最大的值。
输入描述:
第一行输入数组中元素个数n,1 < n <=?100000
第二行输入数字序列,以空格进行分隔,数字取值为4字节整数
输出描述:
输出差值的最大取值
示例1:
输入:
6?
1 -2 3 4 -9 7
输出:
10
说明:将数组 nums 划分为两个非空数组的可行方案有:
左数组 = [1] 且 右数组 = [-2,3,4,-9,7],和的差值 = |1 - 3|=2
左数组 = [1,-2] 且 右数组 = [3,4,-9,7],和的差值 =| -1-5 |=6
左数组 =[1,-2,3,1] 且 右数组 =[4,-9,7],和的差值 =|2 - 2|=0
左数组 =[1,-2,3,4]?且右数组=[-9,7],和的差值 =|6 -(-2)| = 8,
左数组 =[1,-2,3,4,-9] 且 右数组 = [7],和的差值 =|-3-7| = 10
最大的差值为10
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
- 首先,我们可以使用一个循环遍历数组nums,将数组分割成左右两个子数组。
- 对于每个分割点,我们可以计算左子数组的和left_sum和右子数组的和right_sum。
- 然后,计算差值diff = abs(left_sum - right_sum)。
- 在遍历过程中,记录并更新最大的差值max_diff。
- 最后,返回最大的差值max_diff作为结果。
# -*- coding: utf-8 -*-
'''
@File : 2023-B-分割数组的最大差值.py
@Time : 2023/12/23 23:01:42
@Author : mgc
@Version : 1.0
@Desc : None
'''
def max_difference(nums):
n = len(nums)
max_diff = float('-inf') # 初始化最大差值为负无穷大
left_sum = 0 # 左子数组的和
right_sum = sum(nums) # 右子数组的和
for i in range(n-1): # 遍历数组,从第一个元素到倒数第二个元素作为分割点
left_sum += nums[i]
right_sum -= nums[i]
diff = abs(left_sum - right_sum) # 计算差值
max_diff = max(max_diff, diff) # 更新最大差值
return max_diff
# 主程序
n = int(input()) # 输入数组元素个数
nums = list(map(int, input().split())) # 输入数字序列
result = max_difference(nums) # 调用函数计算最大差值
print(result) # 输出最大差值