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

2021-09-17 23:49:26 字數 1947 閱讀 1466

在乙個長度為n的陣列裡的所有數字都在0~n-1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。

1.方法一:把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜度為o(n*lg(n)),不是很好。

2.方法二:使用雜湊表,時間複雜度o(n),空間複雜度o(n),空間換時間尚可。

3.方法三:把每個數字放回對應的位置上去,如果某個數字無法放回就說明該數字重複。

#include

#include

//為了使用sort

using

namespace std;

bool

cmp(

int a,

int b)

intmain()

;int len =

sizeof

(a)/

sizeof

(a[0])

;sort

(a,a+len,cmp)

;//第三個引數可選,示例中為降序排序

for(

int i =

1; i < len; i++)}

return0;

}

#include

using

namespace std;

bool

duplicate

(int numbers,

int length,

int*duplication)

;int

main()

;int

*result =

newint(0

);//duplicate

(a,sizeof

(a)/

sizeof

(int

), result);//

cout <<

*result << endl;

system

("pause");

return0;

}bool

duplicate

(int numbers,

int length,

int*duplication)

else

}return

false

;}

#include

using

namespace std;

bool

duplicate

(int numbers,

int length,

int* duplication)

;int

main()

;int

*resu =

newint(0

);duplicate

(a,sizeof

(a)/

sizeof

(int

), resu)

; cout <<

*resu << endl;

system

("pause");

return0;

}bool

duplicate

(int numbers,

int length,

int* duplication)

if(numbers[numbers[i]

]!= numbers[i]

)else

}return

false

;}

在乙個長度為n+1的陣列裡的所有數字都在1~n範圍內。所以陣列中至少有乙個數是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。例如,輸入長度為8的陣列,那麼對應的輸出是重複的數字2或者3。

解題思路:

面試題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...

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

leetcode面試題3 思路1 建立乙個陣列,將原陣列元素當做下標統計次數 int findrepeatnumber int nums,int numssize count times for int i 0 i numssize i no such element return 1 思路2 排序...