剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
题目描述:
-
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)的更多相关文章
- C++版 - 剑指offer 面试题31:连续子数组的最大和 题解
剑指offer:连续子数组的最大和 提交网址: http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&am ...
- 【剑指offer】面试题 42. 连续子数组的最大和
面试题 42. 连续子数组的最大和 NowCoder 题目描述 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值. 示例: 输入: [-2,1 ...
- 剑指Offer面试题:28.连续子数组的最大和
一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...
- 《剑指offer》面试题42. 连续子数组的最大和
问题描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 示例1: 输入: nums = [-2,1,-3,4 ...
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...
- 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2 ...
- 【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ
题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点 ...
- 【剑指Offer面试编程题】题目1520:树的子结构--九度OJ
题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1&l ...
随机推荐
- SAM4E单片机之旅——2、LED闪烁之轮询定时器
之前我们使用空循环,达到了延迟的目的,但是这样子的延迟比较不精确.现在就使用实时定时器(RTT)来进行更为精确的计时.RTT虽然不是特别通用,在某些单片机上可能没有,但它较为简单. RTT内部有一个计 ...
- wcf服务发布时,目录中没有文件生成
1.删除原有的配置文件
- 为自己编写的windows应用程序制作安装包
1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包. 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文 ...
- Fully qualified domain name for gitlab
nginx - Fully qualified domain name for gitlab - Stack Overflow https://stackoverflow.com/questions/ ...
- DuiLib笔记之Control常用属性
name 指定控件名称,同一窗口内必须唯一,类型:STRING float 用于指定控件是否使用绝对定位,或设置FloatPercent,类型:BOOL,默认值为false,格式:float=&quo ...
- Redis学习笔记(1):Redis的说明与安装
Redis学习笔记(1):Redis说明的安装 说明 什么是Redis REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-va ...
- [haoi2008]玩具命名
某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很 ...
- Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister —— DP
题目链接:http://codeforces.com/problemset/problem/812/B B. Sagheer, the Hausmeister time limit per test ...
- Nginx配置故障转移
当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用. 如果上游服务器的某一台宕机了,直接轮训到下一个~ 8080 8081 8082 关 ...
- Discuz/X3.1去掉标题中的Powered by Discuz!以及解决首页标题后的"-"
虽然不提倡大家去掉版权信息,但是在实际操作的时候还是去掉,毕竟每个页面标题最后面出现”Powered by Discuz!“会显得页面标题比较冗长. 经过本人的实践,论坛里也有操作方法,不过那个操作方 ...