2011-10-31 57 views
2

我正在使用C#並且有一個包含不同數字的int數字列表,例如{34,36,40,35,37,38,39,4,5,3}。現在我需要一個腳本來查找列表中的不同範圍並將其寫入文件。對於這個例子,它將是:(34-40)和(3-5)。什麼是快速的方式來做到這一點?在數字列表中生成數字範圍

感謝您提前的幫助;

+0

顯然你的第一步應該是對數字進行排序。然後問題變得更容易一些。 –

回答

1

正如邁克所說,首先排序列表。現在,從第一個元素開始,記住該元素,然後將其與下一個元素進行比較。如果下一個元素比當前元素大1,那麼你有一個連續的系列。繼續,直到下一個數字不連續。當你達到那個點時,你有一個從第一個記憶值到當前值的範圍。記住/輸出該範圍,然後再次以下一個值作爲新系列的第一個元素。這將執行大約2N的時間(線性)。

2

最簡單的方法是對數組進行排序,然後執行一次順序遍歷以捕獲範圍。這對你的目的來說很可能足夠快。

0

我會整理它們,然後檢查連續的數字。如果差異> 1,你有一個新的範圍。

2

想到兩種技術:直方圖編排和排序。對於密集數組(對於大多數最小和最大值之間的數字),直方圖效果較好,如果數字集稀疏(實際使用的最小和最小值之間的數字很少),排序會很好。

對於直方圖,只需在相應的位置直方圖中移動數組並將布爾標誌設置爲True,然後直方圖尋找True的運行(默認應爲false)。

對於排序,只需使用最佳適用的排序技術對數組進行排序,然後遍歷排序的數組以尋找連續運行。

編輯:一些例子。假設你有一個包含前1,000,000個正整數的數組,但是191的所有偶數倍數都被刪除(你不知道會提前知道這個數組)。直方圖將是一個更好的方法。假設你有一個包含2(2,4,8,16,...)和3(3,9,27,81,...)冪的數組。對於大型列表,列表將相當稀疏,排序應該會更好。