Python实现【分割数组的最大差值】
n = int(input())
nums = list(map(int, input().split()))
total_sum = sum(nums)
max_diff = 0
left_sum = 0
for i in range(n - 1): # 分割点不能是最后一个元素,确保右数组非空
left_sum += nums[i]
current_diff = abs(2 * left_sum - total_sum)
if current_diff > max_diff:
max_diff = current_diff
print(max_diff)
要解决这个问题,我们需要找到将数组分割成两个非空子数组的所有可能方式,并计算这两个子数组和的差值的绝对值,然后从中找出最大的差值。直接暴力计算所有可能的分割点会导致较高的时间复杂度,这在数组较大时(如 n ≤ 100000)是不现实的。因此,我们需要一种更高效的方法。
关键观察点:
- 总和关系:整个数组的总和 total_sum 是左子数组和 left_sum 和右子数组和 right_sum 的和,即 left_sum + right_sum = total_sum。
- 差值计算:差值的绝对值为 |left_sum - right_sum|,可以转化为 |left_sum - (total_sum - left_sum)| = |2 * left_sum - total_sum|。
- 遍历优化:只需遍历数组一次,计算每个可能分割点的 left_sum,然后根据上述公式计算差值,并记录最大值即可。