在乙個長度為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 排序...