java - Kadane 算法的 O(N) 中的最小总和子数组

标签 java arrays algorithm

我们都知道最大和子数组和著名的Kadane's algorithm。 .但是我们也可以使用相同的算法来找到最小和吗?

我的看法是:

change the sign and find the max sum in that, same as the way we calculate the maximum sum subarray. Than change the sign of the elements in the array to make it in initial state.

如果有任何问题,请帮助我纠正算法。

极端情况:我知道如果所有元素都是正数就会出现问题,我们可以通过做一些预处理来处理这种情况,即如果所有元素都为 +ve 则遍历数组,而不是只返回最小数从阵列。

上述算法将有效并得到 dasblinkenlight 的良好支持(解释) .

最佳答案

Will the approach that I have mentioned work to find the minimum sum?

是的,会的。您可以将寻找最小和的问题重新表述为寻找具有最大绝对值的负和。当您切换数字的符号并保持算法的其余部分不变时,这就是算法将返回给您的数字。

I know there is an issue if all the elements are positive

不,没有问题:当所有元素都为负时,请考虑原始的 Kadane 算法。在这种情况下,算法返回一个空序列,其总和为零 - 在这种情况下可能的最高值。换句话说,当所有元素都为负数时,最好的解决方案是不取任何元素。

您修改后的算法将在所有数字均为正数的情况下执行相同的操作:同样,您最好的解决方案是根本不接受数字。

如果您添加从算法返回的范围不能为空的要求,您可以稍微修改算法以找到最小的正数(或最大的负数),以防 Kadane 的算法返回空范围作为最优解。

关于java - Kadane 算法的 O(N) 中的最小总和子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18472606/

相关文章:

python - 矢量化计算中的简单 pandas/numpy 'indexing'

PHP 问题 : how to array_intersect_assoc() recursively

java - 在一个数组中创建多个 JLabel (Java)

algorithm - 修正的最短路径算法——顶点有点

java - 正确填充 map 中的列表

java - 在字符串中使用正则表达式而不是 contains() 渲染速度较慢

algorithm - 微分与积分(微积分)的C++实现

algorithm - 具有最大和加约束的最长递增子序列 - 可以跳过允许的元素数量

java - 为什么 MongoDB maven 依赖无法添加运行时范围?

java - 我可以在 JAX-RS 中用一个实现来实现两个资源接口(interface)吗?