待字閨中之數組統計分析

來源:互聯網
上載者:User

標籤:待字閨中   演算法   

題目來源,待字閨中,原創@陳利人 ,歡迎大家繼續關注公眾帳號“待字閨中”

給定數組A,大小為n,數組元素為1到n的數字,不過有的數字出現了多次,有的數字沒有出現。請給出演算法和程式,統計哪些數字沒有出現,哪些數字出現了多少次。能夠在O(n)的時間複雜度,O(1)的空間複雜度要求下完成嗎?

這個題目,是有一定技巧的。技巧是需要慢慢積累,待經驗多了之後,可以靈感或者直覺,就產生了技巧。如果不知道技巧,那該怎麼辦呢? 在開始分析之前,說明兩個問題:

  • 原數組是沒有排序的。如果排序了,很簡單的。

  • O(1)的空間含義,可以使用變數,但不能開闢數組或者map等來計數。

這個題目,很直接的解法就是兩層遍曆,O(n^2)的複雜度,O(1)的空間。空間滿足了,但是時間沒有。 很多類似的題目,都會用XOR的方法,大家仔細想一下,這個題目,可以嗎?或者這個題目和可以用XOR的題目的差異在哪兒?最直接的就是,每一個數位重複的次數是不同的。

還有就是以空間換時間的方法,例如用hash map或者數組來計數。時間滿足了,但是空間沒有滿足。 那怎樣才能有時間複雜度O(n),空間複雜度O(1)的演算法呢?不能開闢新的空間,那麼只剩下,重複利用數組A。那麼該如何利用數組A呢?

首先,我們介紹一種三次遍曆數組的方法,我們都考慮數組從1開始:

  • 第一次遍曆:對於每一個A[i] = A[i] * (n+1)

  • 第二次遍曆:對於每一個i,A[A[i]/(n+1)]++

  • 第三次遍曆:對於每一個i,A[i] % (n+1)就是出現次數

A[i]應該出現在A中的A[i]位置,乘以(n+1)、再除以(n+1),很容易的來回變換;第二次遍曆,對於A[i]本來所在的位置不斷增1,但絕對不對超出(n+1)的,那每一個i出現的次數,就是A[i]對(n+1)取餘。

還有一種兩次遍曆的方法,也是上面的思路:考慮A[i],現在位置是i,如果採用A來計數,它的位置應該是A[i] % (n+1),找到計數位置,該如何處理這個位置呢?加1嗎?顯然不可以,這裡有一個技巧,就是加(n+1),有兩個原因

  • 加n可以保證A[i] % (n+1)是不變的

  • A數組,最後每一個元素表示為A[i] = x + k*(n+1),其中x

具體代碼如下

void statistics1(int* data,int n)//方法一:三次遍曆{if(data == NULL || n <= 1)return;int i;for(i = 1;i <= n;i++){data[i] *= (n+1);}for(i = 1;i <= n;i++){data[data[i] / (n+1)]++;}for(i = 1;i <= n;i++){cout << i << " 出現了 " << data[i] % (n+1) <<" 次"<< endl;}}void statistics2(int* data,int n)//方法二:兩次遍曆{if(data == NULL || n <= 1)return;int i;for(i = 1;i <= n;i++){data[data[i]%(n+1)] += (n+1);}for(i = 1;i <= n;i++){cout << i << " 出現了 " << data[i]/(n+1) << " 次" << endl;}}
如有問題,請指正

待字閨中之數組統計分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.