【发布时间】:2013-06-12 21:21:24
【问题描述】:
我已经被这个算法难住了很久。
假设有四个整数范围。每个范围都有一个 Start 和一个 End 值。
Range A: 0,5
Range B: 4,12
Range C: 2,10
Range D: 8,14
从这些值中,我想得到一个新的集合,它计算落在特定整数范围内的范围数。其中每一个都有 Start、End 和 Count 值,产生如下内容:
(Start, End, Count)
0,1,1 (Only 1 range (A) falls between 0 and 1 inclusive)
2,3,2 (2 ranges (A,C))
4,5,3 (3 ranges (A,B,C))
6,7,2 (2 ranges (B,C))
8,10,3 (3 ranges (B,C,D))
11,12,2 (2 ranges (B,D))
13,14,1 (1 range (D))
这有意义吗?处理算法的好方法是什么?
【问题讨论】:
-
您想要什么算法取决于您的用例 - 您希望处理的最大范围数和最大范围大小是多少?
-
@Patashu 范围的最大数量应该在数百到数千之间,范围大小也是如此。
-
如果您不需要记住哪些范围覆盖了哪些数字,只需记住覆盖它的范围数,请创建一个索引为 0...n 的数组,其中 n 是任何范围的最大最大值,并且对于每个范围,它所覆盖的数组的所有元素都增加 1。
-
@vsync 很酷。虽然那是差不多 3 年前的事了。我什至不记得我在编码什么。大声笑。
标签: algorithm integer counting range