1. 程式人生 > >【刷題】去除陣列中唯一重複的數

【刷題】去除陣列中唯一重複的數

題意:一個數組,裡面只有一個重複的數,找出這個重複的數,並考慮時間複雜度。

分析:

1,如果去過該陣列是存在某個範圍之內,且佔滿了該範圍,只多了一個數,如陣列有101個數,數的範圍是[1, 100]。就是說該陣列中的數包含了1到100所有的數,且第101個數也是在[1, 100]範圍內的。

那麼可以用該陣列全部數字的和再減去sum(1+2+...+100),得到的數字就是重複的數。

2,如果去過該陣列是存在某個範圍之內,但並沒有說明會佔滿該範圍。

就可以用結構法,既然是在某個範圍內,比如[1, 1000],那麼可以設定一個數組下標,遍歷陣列,如果陣列中的值與陣列下標相同,那麼就可以設定該下標陣列的值為1,一直遇到陣列中的值與所對應的陣列下標的值為1,就表示遇到了重複的數字。

3,如果現在資料的範圍不知道

  可以使用hash的方式。遍歷陣列,將遇到的值用hash的方式對映到某個地方,在此過程中如果遇到衝突就表示該值就是重複值。

       定義一個字典map,遍歷陣列,將其值作為key,如果陣列的值不在map中就繼續,如果在就表示找到了重複的數。

       (C++的map是一顆紅黑樹----非常嚴格意義上的平衡二叉樹)

     (python的dict中key並不是唯一的,是可以重複的)

 

使用hash查詢重複數C++語言實現:

https://blog.csdn.net/shaya118/article/details/40896429