码迷,mamicode.com
首页 > 编程语言 > 详细

求子数组的最大和

时间:2015-07-04 00:54:38      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:华为上机题

输入一个整形数组。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。

  • 接口

Int GetSubArraySum(Int* pIntArray,Int nCount);

  • 规格

要求时间复杂度为O(n)

  • 举例

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2
因此输出为该子数组的和18

华为OJ上的这道题目与算法导论中最大子序列求和略微不同,在这里没有规定如果数组全为负数的话那么我们就定义最大子序列和为0.
所以要先对这种情况加以判断,然后在运用动态规划里的知识,在时间复杂度为n下进行运算.

完整代码如下:

#include <stdlib.h>
#include <string.h>
#include "oj.h"


/*
功能:
    
输入:pIntArray:数组,nCout:数组长度
    
输出:
     
返回:返回最大值
     
*/

int GetSubArraySum(int* pIntArray, int nCount)
{
    /*在这里实现功能*/
    if(pIntArray==NULL||nCount<1)
    	return -1;
  
	  int b=0,cnt=0,a=pIntArray[0];
	  //全是负数的情形
	  for(int i=0;i<nCount;i++)
	  {
	    if(pIntArray[i]<0)
			  cnt++;

		 if(a<pIntArray[i])
			  a=pIntArray[i];
	  }

	  if(cnt==nCount)
		  return a;

	 int ThisSum,MaxSum,j;
	 ThisSum = MaxSum =0;
	 for(j = 0;j < nCount;j++)
	 {
	    ThisSum += pIntArray[j];
	      
	    if(ThisSum > MaxSum)
	       MaxSum = ThisSum;
	    else if(ThisSum < 0)
	       ThisSum = 0; 
	  }
	    return MaxSum;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

求子数组的最大和

标签:华为上机题

原文地址:http://blog.csdn.net/persever/article/details/46747061

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!