面試題——找出1000個連續數中出現的一個重複數

前些天去面試一家做ipad開發的公司,第一道題是找出1000個數(1-999)中一個重複的數。這1000個數是連續且亂序的。我的第一反應就是創建一個999的數組,然後根據數字找相應的數組下標,如果對應的爲空則填充,如果有值則找到了重複的數。python版的解法如下:

 

# 創建測試數據,1000個數,隨機排序,爲了簡單用了0-999

 

# 使用數組的方式查找

 

 

該方法是時間複雜度最低的,但是空間複雜最高。面試過後纔想明白其實存儲那1000個數的數組(這裏是lst)本身就是存儲空間,我無須再創建一個臨時的1000數組。只要創建一個用於保存臨時交換數字的空間就可以了。解題思路還和上面一樣,按照數字與數組下標的對應關係,來填充到相應位置。只是每一次填充過程都是一個系列替換過程,比如[2,1,3,0]這樣的數組,拿到第一個數字式2,則將[2]中的3保存到臨時變量中,然後[2]=2,然後再將[3]中的0保存在臨時變量中[3]=3,然後將[0]=0。這樣一個交換過程就完成了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章