一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的)
例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3)
《编程之美》最后给出了一个时间复杂度为O(n)的算法,实现的代码如下:
#include <stdio.h>
int maxSubSum(int* array, int length) {
int nAll = array[length -1];
int nStart = array[length-1];
int i;
for( i = length-2; i>=0; i--) {
if(nStart < 0)
nStart = 0;
nStart += array[i];
if(nStart > nAll) //若当前子数组之和大于nAll,则更新nAll
nAll = nStart;
}
return nAll;
}
int main() {
int a[7] = {-2,5,3,-6,4,-8,6};
int maxSub = maxSubSum(a,7);
printf("Max sub sum = %d\n",maxSub);
}
其中nAll保存当前的最大子数组之和,先定义初值为最后一个元素,
nStart保存当前的子数组之和,若为负数(最大和的子数组不可能包含当前子数组),则在下次遍历时清零,重新寻找最大和的子数组
分享到:
相关推荐
(注:这两天看《编程之美》,发现2.14节,求数组的子数组之和的最大值,跟这个题十分相似,但是没有要求求出开始喝结束的位置,只要求求出最大值,解题思路跟下面的代码相似,但只用了两个变量,没有用数组,做到...
- **选择性结果**:如`max`、`min`函数可以返回最大值及其索引。 - **数组输入**:许多函数支持数组作为输入参数。 - **2.11 画图入门** - **简单xy绘图**:使用`plot`函数绘制二维曲线图。 - **打印图象**:...
7.6.1 窗口的最小化和最大化 7.6.2 VBA代码的存储 7.6.3 VBA代码的输入 7.7 VBE环境的定制 7.7.1 使用“编辑器”选项卡 7.7.2 使用“编辑器格式”选项卡 7.7.3 使用“通用”选项卡 7.7.4 使用“可...
- `int list_pri[]`: 需要查找最大值的数组。 #### 2.11 `ai_turn0` 函数 - **功能**: AI的初始回合逻辑。 - **参数**: - `int player2[]`: AI玩家的手牌数组。 - `int *count_temp`: 指向当前可用牌数的指针。 ...
本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一,在世界范围内广受欢迎,口碑极佳。 本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。 内容简介 本书是...
它可以分为最大堆和最小堆两种,其中最大堆的每个节点的值都不小于其子节点的值,而最小堆则相反。二叉堆广泛应用于各种排序算法以及图论中的最短路径算法。 **1.6 胜者树** 胜者树是一种特殊的树形结构,主要用于...
2.10 求主对角线之和 2.11 完数求解 2.12 求s=a+aa+aaa+aaaa+aa...a的值 2.13 高度计算 2.14 乘法口诀 2.15 无重复三位数 2.16 菱形打印 2.17 利润计算 2.18 第几天判断 2.19 从小到大输出数列 2.20 猴子吃桃问题 ...
- 完全数是指该数等于其所有真因数之和。 - 示例代码:遍历每个数,找到所有真因数,累加并判断是否等于原数。 **2.7 输入正实数x,求平方不超过x的最大整数n** - 示例代码:使用循环结构,逐步增加n的值,直到n的...
2.14 控件数组典型实例 实例102 向窗体中动态添加控件 实例103 公交线路模拟 第3章 图形技术 第4章 多媒体技术 第5章 文件系统 第6章 操作系统与Windows相关程序 第7章 注册表 第8章...