/* 找出一個數組裏,不重複的數
* 方法1 :hash數組 時間複雜度o(n),缺點只支持整型
* 用一個數組去存放對應的位置,無則修改,有則略過,最後統計
*/
#include<iostream>
using namespace std;
int main()
{
int a[]={1,2,0,1,2,0,4,5,6,9,3};
int length = sizeof(a)/sizeof(int);
cout <<length<<endl;
int max_a = a[0];
for (int i=0;i<length;++i)
{
if(max_a<a[i])
max_a=a[i];
}
max_a++;//作數組長度時+1,防止下面訪問越界,
int hashnum[max_a];
for (int i=0;i<max_a;++i)
hashnum[i]=0;
for(int i=0;i<length;++i)//這個for循環用來篩選掉重複的數據
{
if(hashnum[a[i]]==0)
{
hashnum[a[i]]=1;
}
}
int num=0;
for (int i=0;i<max_a;++i)//統計
num+=hashnum[i];
cout << "diff count: "<<num<<endl;
return 0;
}
/* 找出一個數組裏,不重複的數
* 方法2 :先排序 兩兩互比 計數 時間複雜度o(n*n),優點支持其他類型
*/
#include<iostream>
using namespace std;
int main()
{
int a[]={1,2,0,1,2,0,4,5,6,9,3};
int length = sizeof(a)/sizeof(int);
int temp;
int count;
cout <<length<<endl;
for(int i=0;i<length-1;i++)
{ for(int j=0;j<length-1-i;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i=0,j=1;j<length;i++,j++)
{
if(a[i]==a[j])
count++;
}
int b=0;
b= length-count;
cout << "diff num: "<<b<<endl;
return 0;
}