【发布时间】:2016-03-05 17:40:28
【问题描述】:
我正在尝试提出一种伪代码蛮力算法,该算法在列表 a[sub1] 到 a[subn] 中找到两个数字的最大乘积,其中 n 大于或等于 2。现在,我有
for ( i = 1 to n -1)
a[subi] = a[subi-1] * a[subi+1]
for (j = a[sub j+1] to n)
a[sub j] = a[sub j-1] * a[sub j+1]
end for
end for
return `a[sub i]`
return `a[sub j]`
但是,这是不正确的。我觉得这里缺少一些简单的东西,但我无法弄清楚。有任何想法吗?提前致谢。
【问题讨论】:
-
为什么不将列表中的两个最大值相乘?
-
读了你的代码后我还是想不通你想做什么,不就是2个for循环和测试a[i]*a[j]的组合是最好的吗?
-
您可以对列表进行线性遍历并挑选出两个最高值,然后将它们相乘以获得您的结果。
-
这可能会更好一点。这个怎么样? @shole @IsaacTurner
large = a_1 * a_2 for(i = 1 to n) for(j = i+1 to n) if(large < a_i * a_j) large = a_i * a_j -
我认为@NickZuber 的解决方案是最好的,因为它是线性的:找到最大的 2 个负数和最大的 2 个正数,取更大的产品
标签: algorithm sorting pseudocode discrete-mathematics