給定一個大小爲n的數組A和兩個數字a和b與b-a + 1 = n,我需要確定A是否包含每個a和b之間的數字(恰好一次)。例如,如果n = 4且a = 1,b = 4,那麼我期待看看A是否是[1,2,3,4]的重新排列。確定一個數組是否每個都有數字a到b
實際上,我需要用O(1)空間(沒有散列表)來做到這一點。
我的第一個想法是對A進行排序,但是我必須在不重新排列A的情況下執行此操作,所以這已經結束了。
我的第二個想法是一次運行A,將條目加起來並檢查它們是否在正確的範圍內。最後,我必須得到正確的總和(對於a = 1,b = n,這是n(n + 1)/ 2),但是這並不總是適用於所有情況,例如, [1,1,4,4,5]通過n = 5,a = 1,b = 5的測試,但不應該。
我的工作的唯一想法是通過數組n次,確保每次只看到一次數字。有更快的解決方案嗎?
* n *有多大?爲什麼O(1)空間要求? –
聽起來像面試問題。 – herohuyongtao
不是面試問題或家庭作業。對於大小,n可以達到10^9或更多。我的解決方案有效,但必須有更好的東西。 – Daniel