【剑指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 ...
随机推荐
- Python load json file with UTF-8 BOM header - Stack Overflow
Python load json file with UTF-8 BOM header - Stack Overflow 3 down vote Since json.load(stream) use ...
- spring管理hibernate4 transaction getCurrentSession为什么报错?
hibernate4不支持你用hibernate3的 getcurrentSession,建议你用openSession
- poj 3311 Hie with the Pie(状态压缩dp)
Description The Pizazz Pizzeria prides itself or more (up to ) orders to be processed before he star ...
- Python3.X与Python2.x的区别
一张图说明Python2.x与Python3.x的不同. Python3.x默认使用Unicode编码.支持中文. 更多介绍请看:https://segmentfault.com/a/11900000 ...
- HTML标签的offset、client、 scroll和currentStyle属性
本文来自:http://www.cnblogs.com/quanhai/archive/2010/04/19/1715231.html offsetHeight = borderTopWidth + ...
- 【Java基础】可变参数
下面是一个简单的小程序: import java.util.Arrays; class lesson6 { public static void main(String[] args) { ,,,,, ...
- application,session,cookie三者之间的区别和联系
application: 程序全局变量对象,对每个用户每个页面都有效 session: 用户全局变量,对于该用户的所有操作过程都有效 session主要是在服务器端用,一般对客户端不 ...
- 《JavaScript 闯关记》之语法
JavaScript 的语法大量借鉴了 C 及其他类 C 语言(如 Java 和 Perl)的语法.因此,熟悉这些语言的开发人员在接受 JavaScript 更加宽松的语法时,一定会有种轻松自在的感觉 ...
- 根据一个旅游网站的psd素材还原的静态页面
自学web前端的html.css和jquery两个月,想检验下自己的学习成果,遂从网上下了个关于旅游网站的psd素材,自己照着素材还原网站的静态页面. 这是我制作好的静态页面的压缩文件:旅游网站首页. ...
- JQ动画,背景透明度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...