zoukankan      html  css  js  c++  java
  • 小米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;
    }
     

  • 相关阅读:
    TortoiseGit日常使用指南
    Ajax在MVC中的应用
    STL源码学习内存管理
    功能最强大的.Net代码生成器——EasyCode
    TortoiseGit使用入门
    负载均衡时数据包流程详解
    C++异步编程 for VS2011
    (译)一个通用快速的反射方法调用
    移位运算
    使用Autofac在ASP.NET Web API上实现依赖注入
  • 原文地址:https://www.cnblogs.com/linruier/p/9972869.html
Copyright © 2011-2022 走看看