题目描述:

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?

输入:

输入有多组数据,每组测试数据包括两行。

第一行为一个整数n(0<=n<=100000),当n=0时,输入结束。接下去的一行包含n个整数(我们保证所有整数属于[-1000,1000])。

输出:

对应每个测试案例,需要输出3个整数单独一行,分别表示连续子向量的最大和、该子向量的第一个元素的下标和最后一个元素的下标。若是存在多个子向量,则输出起始元素下标最小的那个。

样例输入:
- - -

-    

 - -  -
样例输出:
-  

解题思路:

  算法思路,大概是:

  我们记录当前扫描的最大和,与记录中的最大和。如果当前的和超过了最大和,就替换,并且记录两端坐标。否则就继续扫描。

while(i<n){
if(newMax < ){
newMax = gArr[i];
newBegin = i;
newEnd = i;
}else{
newMax += gArr[i];
newEnd = i;
}
if(newMax > realMax){
realMax = newMax;
realBegin = newBegin;
realEnd = newEnd;
flag = ;
}
i++;
}

  但是,这个题目的测试用例很奇怪,它仅支持前向的最大子段,而不是后向的最大字段。举个例子:

  我们输入-1 0 5 0 0 得到的应该是5 1 2  而不是5 1 4,也就是说,它向前满足最大子段,但是不保证向后满足,但是也可能是没有这种用例,我的代码刚好踩中了空挡区。至少我的通过用例是这样证明的。如果理解不对,还请改正。第二个测试用例很奇怪。

全部代码:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100000
int gArr[MAXSIZE] = {};
int main(){
int n,i;
int realMax,realBegin,realEnd;
int newMax,newBegin,newEnd;
int flag;
while(scanf("%d",&n)!=EOF && n> && n <= ){
for(i=;i<n;i++){
scanf("%d",&gArr[i]);
}
realMax=-,realBegin=,realEnd=;
newMax=-,newBegin=,newEnd=;
flag = ;
i=;
while(i<n){
if(newMax < ){
newMax = gArr[i];
newBegin = i;
newEnd = i;
}else{
newMax += gArr[i];
newEnd = i;
}
if(newMax > realMax){
realMax = newMax;
realBegin = newBegin;
realEnd = newEnd;
flag = ;
}
i++;
}
if(flag)
printf("%d %d %d\n",realMax,realBegin,realEnd);
else
printf("%d %d %d\n",-,,);
}
return ;
}
/**************************************************************
Problem: 1372
User: xhalo
Language: C
Result: Accepted
Time:450 ms
Memory:1304 kb
****************************************************************/

剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)的更多相关文章

  1. C++版 - 剑指offer 面试题31:连续子数组的最大和 题解

    剑指offer:连续子数组的最大和 提交网址: http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&am ...

  2. 【剑指offer】面试题 42. 连续子数组的最大和

    面试题 42. 连续子数组的最大和 NowCoder 题目描述 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值. 示例: 输入: [-2,1 ...

  3. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

  4. 《剑指offer》面试题42. 连续子数组的最大和

    问题描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 示例1: 输入: nums = [-2,1,-3,4 ...

  5. 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ

    题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...

  6. 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ

    题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...

  7. 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2 ...

  8. 【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ

    题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点 ...

  9. 【剑指Offer面试编程题】题目1520:树的子结构--九度OJ

    题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1&l ...

随机推荐

  1. Vue中data重置问题

    Object.assign() Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 目标对象有1个,后边可以有多个源对象.注意他只会拷贝源对 ...

  2. PostgreSQL Client Authentication Configuration File

    PostgreSQL: Documentation: 10: 16.4. Installation Procedure https://www.postgresql.org/docs/10/stati ...

  3. Refusing to install package with name “XXXX”

    我的执行步骤 我创建了一个名叫express的文件夹,想在这个工程中学习express 进入该文件夹,执行npm init来初始化package.json文件,一直回车. 我们会发现当前文件夹多了一个 ...

  4. Hibernate ManyToOne Mappings 多对一关联映射

    Hibernate ManyToOne Mappings 多对一关联映射 Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml)2.创建持久化类 ...

  5. [数据挖掘课程笔记]Naïve Bayesian Classifier

    朴素贝叶斯模型 1) X:一条未被标记的数据 2) H:一个假设,如H=X属于Ci类 根据贝叶斯公式 把X表示为(x1,x2,....xn) x1,x2,....xn表示X在各个特征上的值. 假设有c ...

  6. Mall电商项目总结(二)——nginx负载均衡配置和策略

    1. nginx配置文件 用户在浏览器上输入,http://www.xwld.site/ 实际上是在访问服务器80端口,nginx 监听80端口,将用户的请求转发到8080和9080端口 . upst ...

  7. ubuntu12.04不能记住上次编辑位置的解决方案

    1:按照网上的代码 au BufReadPost * |if line("'\"") <= line("$")|exe("norm ' ...

  8. sqlserver锁表查看

    sp_lock--查询哪个进程锁表了,spid:进程ID,ObjId:对象ID EXEC sp_executesql N'KILL [spid]'--杀进程 select object_name([O ...

  9. 基于BASYS2的VHDL程序——分频和数码管静态显示程序

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...

  10. git 合并子分支

    1.子分支 $ git status 位于分支 base 无文件要提交,干净的工作区 2.子分支更新 $ git pull origin base 来自 http://106.14.59.204/ji ...