2017-05-06 76 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

相关问题