2012-10-30 48 views
1

我需要生成唯一的數字,我可以想到連續的方法,例如,我可以有一個從0開始的計數器,每次需要唯一的數字時我返回計數器並將計數器增加1,這樣做很簡單直到我可能有很多獨特的數字超出了數據類型的範圍(比如說int),同樣,生成的唯一數字,例如,計數器是10,但是4和5不再被使用,因此它們可以是重用,如何在不保留數據結構的情況下使用可重用的數字?iOS:使用現有號碼生成唯一連續號碼的最佳方式是可移除的嗎?

謝謝!

回答

0

你能替代你已經發放的號碼嗎?如果是這樣,那麼只要返回任何數字,替換最近分發的一個,並遞減分配計數器。如果它是最近被返回的那個,則跳過替換。

否則,我想你能做的最好的事情是保持一個有序的數組範圍。

分配一個新的號碼:

如果數組爲空,創建一個新的範圍和在其返回的唯一的號碼。

否則,獲取數組中的第一個範圍並將其長度增加1.返回該數字。檢查是否使前兩個範圍加入。如果是這樣,然後將它們合併成一個範圍。

要返回一個數字:

搜尋落入範圍內(例如,通過二進制搜索,看看NSOrderedSet如果你的部署計劃允許的話)。如果返回的數字在範圍的任一端,那麼只需縮小範圍。否則將一個分成兩個,返回的數字作爲洞。