2017-05-06 73 views
-5

我有一個2×N個(2-列和n行)二維陣列,其中該值將是在1至60(僅整數)的範圍內。爲了清楚起見,我需要找出如下所述的行的頻率。如何找到在2×N個二維數組元素的頻率用C

輸入數組

0-> 9,11
1-> 9,10
2-> 2,10
3-> 9,11
4-> 9,11

輸出

(9,11) - > 3次
(9,10) - > 1時
(2,10) - > 1時間

+1

SO不是代碼寫入服務。 – InternetAussie

+1

編寫一個例程以確定元組是否相同。 – BLUEPIXY

+0

贊[this](http://ideone.com/RD9WcJ) – BLUEPIXY

回答

1

合併兩個值在每一行到單個標識符,並且只計數每個標識符(即,直方圖)的發生。例如,如果c1c2是在兩列中的值,並1 <= c1c1 <= 601 <= c2c2 <= 60,那麼你可以使用

k = (c1 - 1) * 60 + (c2 - 1) 

得到0 <= kk < 3600。這意味着每行只有3600個不同的唯一組合值。因此,創建一個這樣大小的數組,併爲每行增加k th條目。

要輸出的數量,只是遍歷所有可能k指出,

c1 = (k/60) + 1 
c2 = (k % 60) + 1 

在一般情況下,如果你有一個整數從iminimax,包容,你可以收拾他們到一個更大的整數使用

base = imax - imin + 1 
packed = (i1 - imin) + base * ((i2 - imin) + base * ((i3 - imin) + ...)) 

,並使用解壓

i1 = imin + (packed % base) 
i2 = imin + ((packed/base) % base) 
i3 = imin + ((packed/(base * base)) % base) 

等等。 0 <= packed,所以你可以使用一個無符號整數類型packed

的類型必須是大到足以容納課程的包裝價值。如果有三個值,那麼packed < base * base * base

相關問題