• 小米oj 数组差(挺好的题)


    - 数组差

    序号:#46难度:困难时间限制:1000ms内存限制:10M

    描述

    给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组元素和的差的绝对值 |SUM(A) - SUM(B)| 最大。 返回这个最大的差值。 例如: 有一个数组{1, 2, -3, 1},可以从中找出两个子数组A = {1, 2}与B = {-3},这两个子数组的元素和分别为 SUM(A) = 3,SUM(B) = -3,因此可以求得差的最大值 |SUM(A) - SUM(B)| = 6。

    输入

    使用逗号(,)分隔的一个整数数组

    输出

    一个整数,表示两个子数组元素和的差的最大值

    输入样例

    1,2,-3,1

     复制样例

    输出样例

    6

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    char buf[1000005];
    int a[1005];
    int read(char *buf,int* num)
    {
        int cnt=0;
        int  v;
        char *p = strtok(buf,",");
        while(p)
        {
            sscanf(p,"%d",&v);
            num[cnt++]=v;
            p = strtok(NULL,",");
        }
        return cnt;
    }
    int lmax[1005];
    int lmin[1005];
    int rmax[1005];
    int rmin[1005];
    int main()
    {
      //  freopen("in.txt","r",stdin);
        while(~scanf("%s",buf))
        {
            int n=read(buf,a);
            int ma=-0x3f3f3f3f;int mi=0x3f3f3f3f;
            int tmp1=0;int tmp2=0;
            for(int i=0;i<n;i++)
            {
                tmp1=tmp1<0?a[i]:tmp1+a[i];
                ma=max(ma,tmp1);
                lmax[i]=ma;
                tmp2=tmp2>0?a[i]:tmp2+a[i];
                mi=min(mi,tmp2);
                lmin[i]=mi;
            }
            tmp1=0;tmp2=0;
            ma=-0x3f3f3f3f;mi=0x3f3f3f3f;
            for(int i=n-1;i>=0;i--)
            {
                tmp1=tmp1<0?a[i]:tmp1+a[i];
                ma=max(ma,tmp1);
                rmax[i]=ma;
                tmp2=tmp2>0?a[i]:tmp2+a[i];
                mi=min(mi,tmp2);
                rmin[i]=mi;
            }
            int ans=0;
            for(int i=1;i<n;i++)
            {
                ans=max(ans,abs(lmax[i-1]-rmin[i]));
                ans=max(ans,abs(lmin[i-1]-rmax[i]));
            }
            printf("%d ",ans);
        }
        return 0;
    }
     

  • 相关阅读:
    Consul运行
    springcloud+Zookeeper测试
    解决:sql2005 安装完后 没有服务的问题
    asp.net dataTable添加列
    C#关闭word进程
    无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”
    C#网页采集
    C#计算时间差值
    C#播放声音
    C#打开得到路径
  • 原文地址:https://www.cnblogs.com/linruier/p/9972869.html
Copyright © 2020-2023  润新知