方法1
直接排序,然后遍历找不同 时间复杂度较高O(nlgn)
# include <iostream>
# include <algorithm>
using namespace std;
int main()
{
int a[10] = {0,1,5,2,6,2,5,2,2,5};
int i=0;
sort(a, a+10);
for (i=1; i<10; ++i){
if(a[i] == a[i-1]){
cout << a[i] << endl;
}
}
return 0;
}
方法2
开辟内存空间,用以哈希表 ,出现标1,没有出现标0
时间复杂度是O(n), 但是空间复杂度也是O(n)
# include <iostream>
# include <algorithm>
using namespace std;
int main()
{
int a[10] = {0,1,5,2,6,2,5,2,2,5};
int i=0;
int hash[10] = {0};
for(i=0; i<10; ++i){
if(hash[a[i]] == 0){
hash[a[i]] = 1;
}else{
cout << a[i] <<endl;
}
}
return 0;
}
方法3(最优解)
时间复杂度是O(n),但是空间复杂度是O(1)
# include <iostream>
# include <algorithm>
using namespace std;
int main()
{
int a[10] = {0,1,5,2,6,2,5,2,2,5};
for(int i=0; i<10; ++i){
while(a[i] != i){
if(a[i] == a[a[i]]){
cout << a[i]<<endl;
break;
}
swap(a[i], a[a[i]]);
}
}
return 0;
}