华为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;
}

全部评论
无论怎么优化都是27.272%,原来是类型问题
点赞 回复 分享
发布于 11-13 18:47 江西

相关推荐

点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务