当前位置: 首页 > 知识库问答 >
问题:

O(N)中最小和子阵的Kadane算法

梁丘亦
2023-03-14

我的看法是:

改变符号并在其中找到最大和,与我们计算最大和子数组的方法相同。改变数组中元素的符号使其处于初始状态。

如果algo有任何问题,请帮助我更正。

拐角情况:我知道如果所有元素都是正的就会有问题,我们可以通过做一些预处理来处理这种情况,即如果所有元素都是+Ve,就遍历数组,而不仅仅是从数组返回最小值。

上面提到的算法将工作,并得到DasBlinkenlight的良好支持(解释)。

共有1个答案

曹季同
2023-03-14

我提到的方法能找到最小和吗?

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

我知道如果所有的因素都是积极的就有问题了

不,没有问题:当所有元素都是负数时,考虑最初的Kadane算法。在这种情况下,算法返回一个零和的空序列--在这种情况下可能的最高的一个。换句话说,当所有元素都是负数时,你最好的解决办法就是什么都不拿。

当所有的数字都为正时,修改后的算法也会这样做:同样,最好的解决方案是完全不取数。

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

 类似资料:
  • 现在我用不同的测试场景测试它,总是比Kadena的结果更好。我不相信这样的运气,但找不到我错过了什么。你能看看这是否是一个有效的解决方案吗? 更新代码的思想是只跟踪一个子数组,并添加到其尾数,当数字很低时,和成为尾数组后的负集开始。另外,一开始的负面项目被忽略了。子数组的头只是向前移动。每次sum看起来是maximal-maxsum并且限制被更新。

  • 我检查了用Kadane算法求最大和的连续子数组的解,我不知道为什么我们在代码中需要全局最大值(下面的代码中是global_max)。 下面是用来查找具有最大和的连续子数组的python代码

  • 这个问题可能是封闭的,因为它听起来很模糊,但我真的问这个,因为我不知道或者我的数学背景不够。 我试图实现一个挑战,其中一部分挑战要求我计算矩阵的最小值和最大值。我对矩阵的实现及其操作没有任何问题,但是什么是矩阵的最小值和最大值?考虑到3x3矩阵是9个数中最小的数,最大的是最大的还是其他什么?

  • 我写了以下内容来计算平均值最小的子数组(最少两个元素)的最小起始索引。 但是,无法找出一种方法来使其更快,即O(n)或O(n log n)方式。我想不出任何方法可以在不按O(n^2)的情况下“访问”所有可能的子数组: 通过日志记录,它会产生正确的输出:

  • 给定一个2维正整数数组,求和最大的HxW子矩形。矩形的总和是该矩形中所有元素的总和。 输入:具有正元素的二维数组NxN子矩形的HxW大小 输出:HxW大小的子矩阵,其元素的总和最大。 我已经使用蛮力方法解决了这个问题,但是,我现在正在寻找一个具有更好复杂性的更好的解决方案(我的蛮力法的复杂性是O(n6))。

  • 我在GeekforGeekshttps://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/中检查“到达终点的最小跳跃次数”问题。我对这里提到的时间复杂度感到困惑,它是O(n^n)。 如果我看到上面的代码块,minJumps(arr,I,h)递归调用是从I=l1调用的。所以在每个递归步骤中,l(