数组差

序号:#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\n",ans);

    }

    return 0;

}

小米oj 数组差(挺好的题)的更多相关文章

  1. lintcode:最大子数组差

    题目 最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 样例 给出数组[1, 2, -3, 1], ...

  2. C++:最大子数组差

    最大子数组差 内存限制:128 MiB        时间限制:1000 ms 题目描述: 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B) ...

  3. lintcode-45-最大子数组差

    45-最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 注意事项 子数组最少包含一个数 样例 给出 ...

  4. [小米OJ] 10. 爬楼梯

    dp 另: 小米oj上的测试样例是错的 ; ) function solution(line) { if (line == 0) return 0; if (line == 1) return 1; ...

  5. 小米OJ刷题日志

    虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 ...

  6. IT公司100题-32-交换元素,使数组差最小

    问题描述: 有两个整数序列a, b,大小都为n, 序列元素的值任意整数,无序. 要求:通过交换a, b 中的元素,使得sum(a)-sum(b),差最小. 例如: var a=[80, 40, 60, ...

  7. 九度OJ 1055:数组逆置 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7324 解决:3429 题目描述: 输入一个字符串,长度小于等于200,然后将数组逆置输出. 输入: 测试数据有多组,每组输入一个字符串. ...

  8. Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组

    题目链接: 题意:有两个操作 操作1:给出n个操作,将区间为l到r的数字改为x 操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果 解法: 把询问离线,按照r从小到大排序 每次询问 ...

  9. 小米oj 重拍数组求最大和

     重排数组求最大和 序号:#34难度:困难时间限制:1000ms内存限制:10M 描述 假设有一个n元素的数组(数组的元素索引从1开始),针对这个数组有q个查询请求,每个请求由一对整数li,ri组成, ...

随机推荐

  1. POJ 1177 矩形周长并 模板

    Picture 题目链接 http://poj.org/problem?id=1177 Description A number of rectangular posters, photographs ...

  2. 第8章:LeetCode--算法:二叉树的创建、遍历、删除、求高度

    创建> 需要给定一个root的key,所有小于这个key的放到左边,大于key的放到右边, 比如vector<int> tree = {5,2,7,1,9,3,8},最后的树: 5 ...

  3. C#基础知识 (转)

    https://www.cnblogs.com/zhouzhou-aspnet/articles/2591596.html(原文地址) 本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年 ...

  4. IOC之MEF学习

    MEF原理上很简单,找出有共同接口的导入.导出.然后找到把导出的实例化,赋给导入.说到底MEF就是找到合适的类实例化,把它交给导入.Export 特性可修饰类.字段.属性或方法,而 Import 特性 ...

  5. str.charAt()与str[]的区别

    str.charAt():只能显示当前字符,没有则显示空. str[]:当索引超出当前字符长度时,则显示undefined.

  6. vue学习(10)-vue-resource

    下载:cnpm i vue-resource --save 在main.js导入包:import VueResource from 'vue-resource' 安装:Vue.use(VueResou ...

  7. 第一章、接口规范之Restful规范

    阅读目录 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源 2.5 资源操作由请求方式决定 3.1 正常响应 3.2 重定向响应 3.3 客户端异常 3.4 ...

  8. namespace" 或The content of element type "mapper" must match "EMPTY"

    必须为元素类型 "mapper" 声明属性 "namespace" 或The content of element type "mapper" ...

  9. GOLANG多态的特征是通过接口来实现的 GOLANG多态形式之一:多态参数

    GOLANG多态的简单实现 //多态的特征是通过接口来实现的 //多态形式之一:多态参数 package main import( "fmt" _"sort" ...

  10. 09_Redis_消息订阅与发布

    一:Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 c ...