华为OD机试 分割数组的最大差值
题目描述
给定一个由若干整数组成的数组nums ,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组),分别对子数组求和得到两个值.计算这两个值的差值,请输出所有分割方案中,差值最大的值.
输入描述
第一行输入数组Q中元素个数n,1< n s 100000
第二行输入数字序列,以空格进行分隔,数字取值为4字节整数
输出描述
输出差值的最大取值
用例1
输
6
1 -2 3 4-9 7
输出
10
注:使用int类型用例只能通过18%,换成long long 通过100%
#include <bits/stdc++.h> using namespace std; int main() { long long n; cin>>n; vector<int> v; long long sum=0; for(int i=0;i<n;i++){ cin>>v[i]; sum+=v[i]; } long long left=0,mx=0; for(int i=0;i<n-1;i++){ left+=v[i]; sum-=v[i]; long long tmp=abs(left-sum);//记录差的绝对值 mx=max(tmp,mx);//边扫描数组边记录最大值 } cout<<mx; }