zoukankan      html  css  js  c++  java
  • 面试题27:连续子数组的最大和

    注意:当函数输入无效时,返回为0,而子数组的和也有可能为0,为了区分,设置一个全局变量标记输入是否有效。

    思路用下表说明:


    代码:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    bool bInvalidInput = false;//用全局变量标记是否为无效输入
    //求连续子数组的最大和
    int FindGreatestSumOfSubArray(int nArr[], int nLength)
    {
        if (nArr == NULL || nLength <=0)
        {
    		bInvalidInput = true;
    		return 0;
        }
    
        int nGreatestSum = 0x80000000;//记录连续子数组的最大和,初始值设置为很小的负数
    	int nCurrentSum = 0;
    	for (int i=0; i<nLength; i++)
    	{        
    		if (nCurrentSum <= 0)
    		{
                nCurrentSum = nArr[i];
    		}
    		else
    		{
    			nCurrentSum += nArr[i];
    		}
    
    		if (nCurrentSum > nGreatestSum)
    		{
    			nGreatestSum = nCurrentSum;
    		}
    	}
    	return nGreatestSum;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int nArr1[8] = {1, -2, 3, 10, -4, 7, 2, -5};
    	int nGreatestSumOfSubArray1 = FindGreatestSumOfSubArray(nArr1, 8);
    	if (!bInvalidInput)
    	{
    		cout << "连续子数组的最大和为:" << nGreatestSumOfSubArray1 << endl;
    	}
    
    	int nArr2[8] = {-1, -2, -3, -10, -4, -7, -2, -5};
    	int nGreatestSumOfSubArray2 = FindGreatestSumOfSubArray(nArr2, 8);
    	if (!bInvalidInput)
    	{
    		cout << "连续子数组的最大和为:" << nGreatestSumOfSubArray2 << endl;
    	}
    	return 0;
    }
    
    
    运行结果:

  • 相关阅读:
    v-cloak
    MVVM
    初识ajax
    装瓶学习法
    回调函数(call back)
    如何让学习变得纯粹?
    异步
    grep用法
    Shell中的&&与||的区别
    shell中使用>/dev/null 2>&1 丢弃信息
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3214902.html
Copyright © 2011-2022 走看看