- 论坛徽章:
- 0
|
本帖最后由 enough_zerg 于 2012-03-29 13:34 编辑
最近项目收尾,闲来无事,偶尔看到这么一个题目:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为最多O(n)。
写了如下代码
不太满意,看下能有更快的方法没
- #define ERR -1
- #define IS_OK 0
- int findmax(int *pData, unsigned int length, int *sum)
- {
- if (pData == NULL || length == 0)
- return ERR;
- int cursum = 0;
- *sum = 0;
- int max = pData[0];
- int i = 0;
- for (; i < length; i++)
- {
- cursum += pData[i];
- if (pData[i] > max)
- {
- max = pData[i];
- }
- if (cursum < 0)
- {
- cursum = 0;
- }
- if (cursum > *sum)
- {
- *sum = cursum;
- }
- }
- if (*sum == 0)
- {
- *sum = max;
- }
- return IS_OK;
- 35 }
复制代码 |
|