找出一個數組裏,不重複的數

/*  找出一個數組裏,不重複的數
 *  方法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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章