【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
来源:互联网 发布:网络龙虎游戏 编辑:程序博客网 时间:2024/05/22 03:02
题目:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为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; }
- 【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
- 【动态规划】之求连续子数组的最大和
- 动态规划经典题目:最大连续子序列和
- 动态规划dp经典题目:最大连续子序列和
- 最大连续子序列和:动态规划经典题目
- 最大连续子序列和:动态规划经典题目(2)
- 最大连续子序列和:动态规划经典题目
- 动态规划经典题目:最大连续子序列和
- 【动态规划】求数组最大的子数组连续和
- 动态规划--连续子序列的最大和
- 02动态规划基础---最大连续子序列的和
- [动态规划]最大连续子序列和
- 最大连续子序列和-动态规划
- 最大连续子序列和----动态规划
- 动态规划? 最大连续子序列和
- 动态规划:最大连续子序列和
- 最大连续子序列和-动态规划
- 连续子数组的最大和 动态规划实现
- [MSDN_vs2008] dynamic_cast Operator
- Linux统计文件行数 wc用用法
- PHP正则表达式:将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
- log4j笔记
- 迭代器的使用--关于迭代器的失效
- 【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
- Qt自绘滚动条
- poj 1321棋盘问题
- mysql中DATETIME、DATE和TIMESTAMP的区别
- PHP正则表达式 /i, /is, /s, /isU等用法
- db2错误信息对对应SQL
- gdbserver远程调试的具体实现(已测试通过)
- C#判断网络地址 Url 是否存在的方法
- 2012年新浪乐居面试资料