2012-02-08 89 views
0

假设你有一个数组,并且你想遍历它,将每个等于某个值的元素改为1,其他的元素改为0.你还需要知道结果中1和0的数目阵列,在另一个时间点。重新迭代数组或携带一个额外的变量?

这样做的最好方法是什么?

当您第一次遍历数组时计算1的数量,并将该数字保存在变量中,直到您真正需要它为止?或者,当你需要1的数量时,再做sum(array_with_0s_and_1s)。

是一种比另一种更有效的方法吗?在我看来,做和会再次迭代数组,并且速度会减慢一倍,而计算第一次的数量时,第一次只会看起来不那么优雅,并且您必须携带一个额外的变量。

+1

两者都是相等的:假设一个数组有n个项目,当相等性检查和更改操作的成本因子为x,成本因子为y的加法操作时,与操作方式无关n·(x + y)= n·x + n·y。 – Gumbo 2012-02-08 09:23:45

回答

1

保持变量的迭代速度会更慢,但如果数组可以在脚下变化,它将保证给出正确答案(变量可能已过时)。

1

如果它是一个小数组,那么差异应该可以忽略不计,因此不管代码的可读性/可维护性/其他可用性如何。

如果第二次迭代数组会导致明显的和有问题的减速,那么需要多余的变量。

9倍于10倍,它不会有所作为,所以在过度优化的过程中寻找好的编码协议。