【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
2012-07-16 17:36
218 查看
题目:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:
首先,这是一道很老的题目,但是比较容易写错,我就在某一外企面试中,被面试官的几个test case给测出逻辑错误来。算法如下:假设当前最大和MAX,连续相加不为零的和SUM,数组当前扫描值A[i];
则
if (SUM > MAX) MAX = SUM;
if (A[i] > MAX) MAX = A[i];
if (SUM < 0) SUM = 0;
最后,对于全负数的情况,需要从头再扫描一遍,选出最大的负数。
代码和测试用例
#include <iostream> using namespace std; int max_seq_sum(int a[], int len) { int max = a[0]; int sum = 0; for (int i = 0; i < len; i++) { sum += a[i]; if (sum > max) { max = sum; } if (a[i] > max) { max = a[i]; } if (sum < 0) { sum = 0; } } if (0 == max) { max = a[0]; for (int i = 0; i < len; i++) { if (a[i] > max) { max = a[i]; } } } return max; } int main() { int a[] = {10, -2, -3}; int b[] = {-10, -2, -3}; int c[] = {3, -2, 10}; cout << max_seq_sum(a, 3) << endl; cout << max_seq_sum(b, 3) << endl; cout << max_seq_sum(c, 3) << endl; }
相关文章推荐
- 动态规划-最大连续乘积子数组
- 最大连续子序列和:动态规划经典题目
- 动态规划题目(三)——最大连续乘积子串
- 动态规划--连续子序列的最大和
- 动态规划:求子数组的最大连续和
- 动态规划: 求一个一维整数数组的最大子序列和
- 动态规划经典题目:最大连续子序列和
- 利用动态规划求连续数组最大和以及最大子矩阵的和
- 最大连续子序列和:动态规划经典题目(2)
- 利用动态规划求连续数组最大和以及最大子矩阵的和
- 动态规划求取连续数组最大和
- 动态规划典型例题--连续子数组的最大和
- 动态规划方法求最大子连续数组乘积
- 动态规划_题目1011:最大连续子序列
- 动态规划经典题目:最大连续子序列和
- 动态规划--求最大连续子数组的和(Python实现)&求解最大连续乘积字串(Python实现)
- 动态规划经典题目:最大连续子序列和
- 子序列最大连续和(动态规划、分治)
- 动态规划求最大连续字序列
- 面试经典(6)--连续子数组最大和--二维