【发布时间】:2017-08-22 11:34:27
【问题描述】:
我正在解决一个 CS 问题,即我们给定一个大小为 N 的数组,使得 N
这是一个例子: N=5, array={12, -4, -10, 4, 9}, answer = 13,因为 4+9 是我们能得到的最好的。
我知道这可以在二次时间内通过蛮力解决,但我想知道这是否可以在对数时间内以线性方式解决。
提前致谢。
【问题讨论】:
标签: arrays dynamic-programming
我正在解决一个 CS 问题,即我们给定一个大小为 N 的数组,使得 N
这是一个例子: N=5, array={12, -4, -10, 4, 9}, answer = 13,因为 4+9 是我们能得到的最好的。
我知道这可以在二次时间内通过蛮力解决,但我想知道这是否可以在对数时间内以线性方式解决。
提前致谢。
【问题讨论】:
标签: arrays dynamic-programming
根据this 的介绍,Kadane 的算法显然会产生线性运行时界限;从那里获取的 C++ 实现如下所示。
int maxSubArraySum(int a[], int size)
{
int max_so_far = INT_MIN, max_ending_here = 0;
for (int i = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if (max_so_far < max_ending_here)
max_so_far = max_ending_here;
if (max_ending_here < 0)
max_ending_here = 0;
}
return max_so_far;
}
【讨论】: