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

2021-08-26 12:06:30 字數 633 閱讀 4828

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

分析: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++語言實現:

找出陣列中唯一重複的數

題目 陣列a n 1至n 1這n 1個數存放在a n 中,其中某個數重複一次。寫乙個函式,找出被重複的數字。方法一 異或法。陣列a n 中的n個數異或結果與1至n 1異或的結果再做異或,得到的值即為所求。include include include include void xor finddup...

題一 尋找唯一重複的數

在長度為1001的陣列中儲存了1到1000總共1000個數,只有乙個數重複,請你找出重複的這個數 以長度為11的陣列為例做運算。如下 public static void main string args int x 0 for int i 1 i n.length i for int i 0 i ...

求陣列中唯一重複的數字

求陣列中唯一重複的數字 陣列a n 1至n 1存在a中,有乙個是重複的,找出這個數字。第一種方法 include int main void int i,sum 0,x for i 0 i 11 i x sum 1 10 10 2 陣列總和 減去1到10得和多出來的就是重複的 printf d n ...