面試題3 陣列中重複的數字

2022-08-23 05:24:09 字數 1171 閱讀 2698

題目描述:

找出陣列中重複的數字。

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

示例 1:

輸入:[2, 3, 1, 0, 2, 5, 3]

輸出:2 或 3

注意判定測試用例條件

空指標,或陣列長度<0

長度為n的陣列中包含0~n-1之外的數字。

方法一:雜湊表

利用資料結構特點,容易想到使用雜湊表(set)記錄陣列的各個數字,當查詢到重複數字則直接返回。

當元素存在雜湊表中,說明該元素重複,返回該元素,如果不存在,就新增到雜湊表中

複雜度分析:

時間複雜度:遍歷陣列使用o(n,雜湊表的新增和查詢元素都是o(1)

空間複雜度:使用hashset占用o(n)的額外空間

public

int findrepeatnumber(int

nums)

for (int i = 0; i)

}set

set = new hashset<>();

for (int

num : nums)

set.add(num);

}return -1;

}

方法二:原地置換

複雜度分析:

時間複雜度:遍歷陣列需要o(n),每個陣列最多只要交換2次,所以是o(2n),最終時間複雜度:o(n)

空間複雜度:o(1),無需額外空間

面試題3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...

面試題3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。雜湊表int findduplicatenum vector int...

面試題3 陣列中重複的數字

面試題3 找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100...