首尾相连数组的最大子数组和

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连 续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用 一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。
输入
输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的长度,第二行依次输入n个整数(整数绝对值不大于1000)。
输出
对于每个测试用例,请输出子数组和的最大值。
样例输入
6
1 -2 3 5 -1 2
5
6 -1 5 4 -7
样例输出
10
14
来源
淘宝2013年校园招聘一面面试题
讲解:和不是循环的有点区别,先写个测试数据吧,呵呵,
5
9 8 -9 5 6
应该是:28
呵呵,我也犯错了好几次啊;其实也是挺简单的

 #include <iostream>
#include <stdio.h>
using namespace std;
int val[];
int maxseq(int a, int b)
{//顺序计算出,最大的值,不循环的,也是这样计算的
int global = , local = ;
for(int i = a; i < b; i ++) {
local = max(val[i], local+val[i]);
global = max(local, global);
}
return global;
}
int minindex(int n) {//寻找此数组中最小的一组的和
int global = 0x7f7f7f7f, local = 0x7f7f7f7f;
for(int i = ; i < n; i ++) {
local = min(local+val[i], val[i]);
if(local < global) {
global = local;
}
}
return global;
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
bool hh = false;
int rev = ;
for(int i = ; i < n; i ++) {
scanf("%d", &val[i]);
if(val[i] < ) hh = true;
rev += val[i];
}
if(!hh)//都大于0,这样写;
{
cout << rev << endl;
continue;
}
int num1 = maxseq(, n);//按照不跨越最后一个计算;
int num2 = minindex(n);
//跨越的,直接数组的总和减去计算的最小的和,就得出来了;
cout << max(num1,rev-num2) << endl;
}
return ;
}

最新文章

  1. GA算法-R语言实现
  2. tomcate端口设定和服务器虚拟目录设定
  3. LeetCode---Hash Table
  4. 动态链接库(DLL)总结
  5. cocos基础教程(5)数据结构介绍之cocos2d::Map&lt;K,V&gt;
  6. OpenJudge 2792 集合加法
  7. winform 窗体关闭按钮禁用、不显示最大化、最小化、关闭按钮 分类: WinForm 2014-12-22 16:09 82人阅读 评论(0) 收藏
  8. const 修饰成员函数体
  9. 2-23c#基础循环语句
  10. laravel5.2之logout注销账号无效
  11. Nginx配置:nginx如何配置跳转fpm
  12. Java线程池中submit()和execute之间的区别?
  13. Dubbo启动过程(Spring方式)详解
  14. 【 D3.js 入门系列 --- 9 】 常见可视化图形
  15. linux shell 随机字符生成单词
  16. Django学习---jsonp跨域请求
  17. Redis存储系统
  18. 关于SO_REUSEADDR的使用说明~
  19. Eclipse+maven 导致Eclipse启动后Build workspaces卡死或者下载缓慢的问题
  20. cdp协议通信并发编程基础之进程

热门文章

  1. jenkins使用slave报编码错误[WARNING] File encoding has not been set, using platform encoding ANSI_X3.4-1968, i.e. build is platform dependent!
  2. linux系统安装gcc
  3. ViewFlipper 淘宝头条 轮播 自动切换
  4. vs中debug和release的区别你知道吗
  5. html5.js 让所有IE支持HTML5
  6. 如何模拟登陆添加了CSRF保护的网站
  7. 理解JAVASCRIPT 中hasOwnProperty()和isPrototypeOf的作用
  8. Netbeans配合xdebug调试
  9. Vue中使用节流Lodash throttle
  10. 对象 get和set方法