為什麼b a i 可以得出重複數字的次數?

時間 2021-06-03 06:59:21

1樓:哦哦加加

b[a[i]] 這種形式本身就是一種對映,b陣列的下標其實是a陣列i的value。遍歷的時候,每發一發現乙個 b對應的下標就+1,所以是計數。

這種對映確實巧妙,但也會有問題。當a的陣列有個值比較大的時候,比如a陣列再多個值:100000.這樣b陣列就需要申請100000個int的空間用來對映100000這個值

2樓:Kevin CHEN

這是頻數排序(Sequrence Sort)。

可以看到第乙個迴圈體中,

b[a[i]]++;

這一句的作用是,將陣列b中第a[i]個元素,自增1。

而a[i]是乙個int的值,是你輸入陣列中第i個數的值。

第乙個迴圈下來,你的a[i]會依次等於『1, 2, 1, 4, 4, 5, 7, 9, 9, 1』。

而這樣的效果是『b[1], b[2], b[1], b[4], b[4], b[5], b[7], b[9], b[9], b[1]』被依次加1。

所以,第乙個迴圈執行完成後,陣列a中的各個數出現了多少次,b中與它的值相等的位置就會被自增多少次。

再通過第二個迴圈體,遍歷一下陣列b的各個元素,就把各個數出現的次數輸出了。

演算法很精妙。一節課上老師問我們,如何通過不比較的方式將乙個陣列排序,後來就講了這個方法。

目前能想到缺點可能是,空間複雜度吧。也就是說,你要建立的陣列的大小,與你需要統計的數的範圍有關。如果要統計一組大範圍的數,對記憶體的要求就比較大。

新手答題,如有不當,感謝指正。

由1 2 3 4 5 6 可以組成多少個不重複的數字,並且1 3 5相鄰,2 4 6相鄰的六位數?

所有排列 135246,246135,135264,264135,135426,426135,135462,462135,135624,624135,135642,642135,153246,246153,153264,264153,153426,426153,153462,462153,15362...

為什麼傅利葉變換得出的頻譜可以反映影象中灰度變化劇烈程度?

甜士多啤梨 其實樓下的各位說的很好了,我詳細用圖講一下理解。從頭來講,從最開始學習傅利葉變換,我們就知道標準余弦訊號 的時域圖是這樣的,來自go gddq.com 頻譜圖是這樣的,當 越大,意味著它頻域上的兩個脈衝分散的越開,也意味著它的頻率越快。通訊訊號是時域變化的,如果轉換成二維空域訊號,可以想...

為什麼可以用複數理論來證明實數理論?

xyor wz 首先,你可能對複數有什麼誤解。要知道複數本來就是作為實數的延拓而出現的。確實很多實數滿足的性質對於全體複數是不成立的,但實數集作為複數集的子集,這些性質依然是對的。回到你的問題,為什麼很多描述上只涉及到實數的定理可以用復分析的工具來證明?因為復分析確實是乙個強有力的工具,很多實的定理...