连续子数组的最大和 代码(C)
题目: 输入一个整型数组, 数组里有正数也有负数. 数组中一个或连续的多个整数组成一个子数组.求全部子数组的和的最大值.
使用一个数保存当前和, 假设当前和为小于0, 则替换新值, 否则, 递加, 使用一个数保存暂时最大值.
代码:
/* * main.cpp * * Created on: 2014年6月29日 * Author: wang */ #include <stdio.h> #include <limits.h> using namespace std; int GetGreatestSumOfSubArray (int* pData, int length) { if (pData == NULL || length <= 0) return 0; int nCurSum = 0, nGreatestSum = -INT_MAX; for (int i=0; i<length; ++i) { if (nCurSum <= 0) nCurSum = pData[i]; else nCurSum += pData[i]; if (nCurSum > nGreatestSum) nGreatestSum = nCurSum; } return nGreatestSum; } int main(void) { int data[] = {1, -2, 3, 10, -4, 7, 2, -5}; int result = GetGreatestSumOfSubArray(data, 8); printf("result = %d\n", result); return 0; }
输出:
result = 18