2012-02-08 27 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倍,它不會有所作爲,所以在過度優化的過程中尋找好的編碼協議。