zoukankan      html  css  js  c++  java
  • 求子数组的最大和

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

    • 接口

    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;
    }



  • 相关阅读:
    解决函数内this指向
    .Math 数值对象
    时间函数
    数学中的弧度和角度
    闭包
    在拖拽元素的时候,如果元素的内部加了文字或者图片,拖拽效果会失灵?
    正则
    JS高级-事件对象
    JS高级-事件捕捉
    JS高级-面向对象
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7357034.html
Copyright © 2011-2022 走看看