2025B-分割数组的最大差值-100分

刷题笔记合集🔗

问题描述

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

输入格式

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

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

输出格式

输出差值的最大取值。

样例1

输入:

6
1 -2 3 4 -9 7

输出:

10

说明:

  • 可行的分割方案有:
    1. [1] 和 [-2,3,4,-9,7], 差值=|1-3|=2
    2. [1,-2] 和 [3,4,-9,7], 差值=|-1-5|=6
    3. [1,-2,3] 和 [4,-9,7], 差值=|2-2|=0
    4. [1,-2,3,4] 和 [-9,7], 差值=|6-(-2)|=8
    5. [1,-2,3,4,-9] 和 [7], 差值=|-3-7|=10
  • 最大的差值为10

题解

本题可以使用前缀和法解决:

  1. 计算整个数组的和sum
  2. 从左到右遍历:
    • 左边的和leftSum不断增加
    • 右边的和rightSum=sum-leftSum
    • 计算差值|leftSum-rightSum|
    • 更新最大差值
  3. 遍历到倒数第二个数为止

时间复杂度:O(n),其中n为数组长度。

参考代码

# 读取输入
n = int(input())
nums = list(map(int, input().split()))

def getResult():
    left_sum = 0
    right_sum = sum(nums)
    max_diff = 0
    
    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

print(getResult())
import j

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:18
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Lorn的意义:你这标个前端是想找全栈吗?而且项目确实没什么含金量,技术栈太少了,边沉淀边找吧 现在学院本想就业好一点四年至少得高三模式两年加油吧
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务