【剑指offer】连续子数组的最大和
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27103959
- 题目描写叙述:
-
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU測试组开完会后,他又发话了:在古老的一维模式识别中,经常须要计算连续子向量的最大和,当向量全为正数的时候,问题非常好解决。可是,假设向量中包括负数,是否应该包括某个负数,并期望旁边的正数会弥补它呢?比如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个開始,到第3个为止)。你会不会被他忽悠住?
- 输入:
-
输入有多组数据,每组測试数据包括两行。
第一行为一个整数n(0<=n<=100000),当n=0时,输入结束。接下去的一行包括n个整数(我们保证全部整数属于[-1000,1000])。
- 输出:
-
相应每一个測试案例,须要输出3个整数单独一行,分别表示连续子向量的最大和、该子向量的第一个元素的下标和最后一个元素的下标。若是存在多个子向量,则输出起始元素下标最小的那个。
- 例子输入:
-
3
-1 -3 -2
5
-8 3 2 0 5
8
6 -3 -2 7 -15 1 2 2
0
- 例子输出:
-
-1 0 0
10 1 4
8 0 3
前面有专门写了一篇求最大连续子数个组的文章,见这里:http://blog.csdn.net/ns_code/article/details/20942045。这里的第三种做法,要在数组中既有负数又有整数的情况下才干得到正确的结果。而这里的測试例子中有全负的情况,因此,跟上面的求解会有些细节上的不同,并且这里除了要求出最大连续子数组的和,还要求出该最大连续子数组,因此要另设两个变量保存该连续子数组的起始和结束的位置。
AC代码例如以下:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
bool flag; int MaxSubSum(int *arr,int len,int *indexBegin,int *indexEnd)
{
if(arr==NULL || len<1)
{
flag = false;
return -1;
} int i;
int MaxSum;
int CurSum;
int CurBegin; //当前的CurSum的開始处的索引
int CurEnd; //当前的CurSum的结束处的索引
for(i=0;i<len;i++)
{
if(i == 0)
{
//先用第一个元素初始化
*indexBegin = 0;
*indexEnd = 0;
CurBegin = 0;
CurEnd = 0;
MaxSum = arr[i];
CurSum = arr[i];
}
else
{
//前面的和小于0,抛弃前面的和,从当前元素又一次開始计算
if(CurSum < 0)
{
CurSum = arr[i];
CurBegin = i;
CurEnd = i;
}
else
{
CurSum += arr[i];
CurEnd = i;
}
if(CurSum > MaxSum)
{
MaxSum = CurSum;
//假设当前和大于前面出现的最大和,
//则替换掉最大和的開始索引和结束索引
*indexBegin = CurBegin;
*indexEnd = CurEnd;
}
}
}
return MaxSum;
} int main()
{
int n;
while(scanf("%d",&n)!=EOF && n!=0)
{
int *arr = (int *)malloc(sizeof(int)*n);
if(arr == NULL)
exit(EXIT_FAILURE); int i;
for(i=0;i<n;i++)
scanf("%d",arr+i); flag = true;
int indexBegin,indexEnd;
int result = MaxSubSum(arr,n,&indexBegin,&indexEnd);
if(flag)
{
printf("%d ",result);
printf("%d ",indexBegin);
printf("%d\n",indexEnd);
} free(arr);
arr = NULL;
}
return 0;
}
/**************************************************************
Problem: 1372
User: mmc_maodun
Language: C
Result: Accepted
Time:450 ms
Memory:1304 kb
****************************************************************/
【剑指offer】连续子数组的最大和的更多相关文章
- 剑指Offer 连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- 用js刷剑指offer(连续子数组的最大和)
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- 剑指Offer——连续子数组的最大和
题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向 ...
- 剑指 Offer——连续子数组的最大和
1. 题目 2. 解答 初始化 sum=0,然后遍历数组进行累加.如果 sum 变为负数,也就说再继续累加的话贡献为负,我们需要更新 sum=0,重新开始累加. 初始化 max_sum 为数组的第一个 ...
- 剑指offer--43.连续子数组的最大和
最大子段和,最大能取所有 ---------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...
- 剑指Offer-30.连续子数组的最大和(C++/Java)
题目: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中 ...
- 3-剑指Offer: 连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- Python中的sys.stdin和input、sys.stdout与print--附带讲解剑指offer42-连续子数组的最大和
2020秋招季,终于开始刷第一套真题了,整套试卷就一道编程题,还是剑指offer上的原题,结果答案死活不对,最后干脆直接提交答案算了,看了下别人的答案,原来是输入数据没有获取的原因,不过这个语法sys ...
- 剑指offer-连续子数组的最大和-数组-python
题目描述 例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止). 给一个数组,返回它的最大连续子序列的和 思路:动态规划 # -*- coding:u ...
- 剑指Offer29 连续子数组最大和
/************************************************************************* > File Name: 29_Greate ...
随机推荐
- PKU 3667 Hotel(线段树)
Hotel The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- HDU 1272 小希的迷宫(并查集) 分类: 并查集 2015-07-07 23:38 2人阅读 评论(0) 收藏
Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就 ...
- wget命令1(转载)
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- Unity 移动MM自签名方式
在使用Unity接移动MM SDK的时候,最后有一个签名. 主要是把计费文件和版权文件放入APK的根目录. 搞了半天才知道前来这么简单..... 软件使用: apk签名工具apktool
- NSNotificationCenter 传对象
[[NSNotificationCenter defaultCenter] postNotificationName:@"postCity" object:pro]; [[NSNo ...
- Struts2+Spring+Ibatis集成合并
上一篇博客讲述了Struts2+Spring的集成合并,主要是利用了一个中间jar包,这篇博客在加上Ibatis持久层框架,三个框架进行合并.其中Struts2和Spring部分和前边的一样,主要是讲 ...
- Struts2(三)——数据在框架中的数据流转问题
一款软件,无在乎对数据的处理.而B/S软件,一般都是用户通过浏览器客户端输入数据,传递到服务器,服务器进行相关处理,然后返回到指定的页面,进行相关显示,完成相关功能.这篇博客重点简述一下Struts2 ...
- Phoenix中Sequence的用法
Phoenix--HBase的JDBC驱动 序列(Sequence)是Phoenix提供的允许产生单调递增数字的一个SQL特性,序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值. 使用C ...
- Young Table(暴力,交换位置)
Young Table Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submi ...
- 怎样在 Swift 项目中使用 CocoaPods
4个步骤,将 CocoaPods 导入 Swift 1.创建.编辑 Podfile 文件并 pod install 2.使用 File -> New -> File- 创建一个 Heade ...