【我解C語言面試題系列】008 去除數組中重複數字問題

來源:互聯網
上載者:User
【我解C語言面試題系列】008 去除數組中重複數字問題

去除數組中重複數字問題

 

有一個大小為100的數組,裡面的數字均介於1到99之間,但是裡面的數字有重複,請寫個函數去除數組中的重複數字。

#define    INIT_NUM -1

方法一:(最最容易想到的辦法)

void RemoveBufferRepNum_00(int buffer[])

{

    int i,j;

 

    for(i=0;i<BUFFERSIZE;i++)

    {

       for(j = i+1;j<BUFFERSIZE;j++)

       {

           if(buffer[i] == buffer[j])

           {

              buffer[i] = INIT_NUM;

              break;

           }

       }

    }

   

    for(i=0,j=0;i<BUFFERSIZE;i++)

    {

       if(buffer[i] == INIT_NUM)

           continue;

       buffer[j++] = buffer[i];

    }

 

    while(j < BUFFERSIZE)

        buffer[j++] = INIT_NUM; 

}

這個演算法最簡單,時間複雜度是O(N2)

 

方法二:(採用hash表法解決)

void RemoveBufferRepNum_01(int buffer[])

{

    int tBuffer[BUFFERSIZE];

    int i = 0,j = 0;

   

    for(i=0;i<BUFFERSIZE;i++)     //初始化數組

       tBuffer[i] = INIT_NUM;

 

    for(i=0;i<BUFFERSIZE;i++)//剔除演算法

    {

       if(tBuffer[buffer[i]] == INIT_NUM)

           tBuffer[buffer[i]] = buffer[i];

    }

 

    for(i=0;i<BUFFERSIZE;i++)

    {

       if(tBuffer[i] == INIT_NUM)

           continue;

       buffer[j++] = tBuffer[i];

    }

    while(j < BUFFERSIZE)

        buffer[j++] = INIT_NUM; 

}

這個辦法是用開輔助空間,設定hash表來實現的,總共執行N次就可以了。時間複雜度是:O( N )。但是唯一的弱點就是需要額外的空間。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.