3.求子数组的最大和
2012-04-19 20:40
288 查看
题目:输入一个整形数组,数组里有正有负。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
分析:由时间复杂度可见,应该是遍历一次就能找出最大和子数组的和。分析这样的子数组的特征,可得:这个最大子串和的初始值一定是从正数开始的(反证法可证)。代码如下:
分析:由时间复杂度可见,应该是遍历一次就能找出最大和子数组的和。分析这样的子数组的特征,可得:这个最大子串和的初始值一定是从正数开始的(反证法可证)。代码如下:
int maxsum(int *array, int n, int *result) { int sum = 0, max = 0, i; if (NULL == array) return -1; for (i = 0; i < n; i++) { sum += array[i]; if (sum < 0) sum = 0; else if (sum > max) max = sum; } *result = max; return 0; }不足:没有考虑输入数组都是非正数的情况。
相关文章推荐
- 微软面试100题之第三题:求子数组的最大和
- 面试题五:求子数组的最大和
- 求子数组的最大和
- 【编程题目】求子数组的最大和 ☆
- 求子数组最大和的解决方法详解
- 程序员面试题精选(03)-求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和---Algorithms
- 求子数组的最大和
- 求子数组的最大乘积
- 求子数组的最大和
- 求子数组的最大和___<3>
- 面试100题:3.求子数组的最大和
- 求子数组的最大和
- 微软等数据结构+算法面试100题(44)-- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和问题--一道浙江大学考研压轴题(被Google拿来做面试题)
- 求子数组之和最大值(包括循环)
- 课堂测试-求子数组和最大值
- 3.求子数组的最大和