Javascript 优化最后一个元素减去第一个元素的算法
我试图优化一个更大的算法的一个缓慢的部分 我有一个随机数数组:Javascript 优化最后一个元素减去第一个元素的算法,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我试图优化一个更大的算法的一个缓慢的部分 我有一个随机数数组: [295, 292, 208, 393, 394, 291, 182, 145, 175, 288, 71, 86, 396, 422] (实际数组要长得多),索引:N(N=5) 我想做的是,对于前N个较小的元素,从最后M个元素中减去1 So(伪代码): 但是我错过了一些东西 [编辑]我觉得自己像个白痴。我没有正确解释我想要什么,已修复。让我们重新组织循环: for b = 6..N for a = 1..5 if a
[295, 292, 208, 393, 394, 291, 182, 145, 175, 288, 71, 86, 396, 422]
(实际数组要长得多),索引:N
(N=5
)
我想做的是,对于前N个较小的元素,从最后M个元素中减去1
So(伪代码):
但是我错过了一些东西
[编辑]我觉得自己像个白痴。我没有正确解释我想要什么,已修复。让我们重新组织循环:
for b = 6..N
for a = 1..5
if ary[a] < ary[b]
ary[b] -= ary[a];
在我看来,Petr的解决方案并没有遵循问题的规范:我们应该为每个“命中”减去1(一),而不是ary[a]的值 这里有一个替代方案:
也许这更像是一个话题。如果一个“最后一个元素”大于两个“第一个元素”之和怎么办?@greybeard——不知道从哪里得到的和?如果第一个元素小于什么?或者你的意思是最少(最小)?@最后面——代码中的
if
应该更有意义。太棒了,谢谢!仅供参考,我编辑了原始需求,因为我是一个白痴,没有正确地键入它们,但这不会改变整体算法,我只需要一个带索引的touple。是的,我更改了规范,因为我不小心写错了。他的算法遵循我最初的要求,但它是相同的通用算法。非常感谢:)好的,欢迎。不过,我相信,对于目前所使用的规格(每种命中减去1),你可能想考虑我已经排好的排序“测试数组”的方法。成功!这基本上就是我现在正在做的:)。排序后的数组([208、292、295、393、394]
)将被二进制搜索,我只需减去索引+1
for a = 1..5
// ???
for b = 6..N
ary[b] -= ???
for b = 6..N
for a = 1..5
if ary[a] < ary[b]
ary[b] -= ary[a];
sum[0] = 0
for a = 1..5
sum[a] = sum[a-1] + ary[a]
for b = 6..N
a_last = maximal a such that sum[a]<ary[b] // use binary search
ary[b] -= sum[a_last]