我有一个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时间
我有一个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时间
合并两个值在每一行到单个标识符,并且只计数每个标识符(即,直方图)的发生。例如,如果c1
和c2
是在两列中的值,并1 <= c1
,c1 <= 60
,1 <= c2
,c2 <= 60
,那么你可以使用
k = (c1 - 1) * 60 + (c2 - 1)
得到0 <= k
,k < 3600
。这意味着每行只有3600个不同的唯一组合值。因此,创建一个这样大小的数组,并为每行增加k
th条目。
要输出的数量,只是遍历所有可能k
指出,
c1 = (k/60) + 1
c2 = (k % 60) + 1
在一般情况下,如果你有一个整数从imin
到imax
,包容,你可以收拾他们到一个更大的整数使用
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
。
SO不是代码写入服务。 – InternetAussie
编写一个例程以确定元组是否相同。 – BLUEPIXY
赞[this](http://ideone.com/RD9WcJ) – BLUEPIXY