【发布时间】:2014-09-14 16:18:02
【问题描述】:
我有两个数组 A 和 B。而且我必须找到数组C 所需的元素数量以适应特定长度。
Length = B[i]-A[i]
例如:
A[0] = 1 B[0] = 4
A[1] = 4 B[1] = 5
A[2] = 5 B[2] = 9
A[3] = 8 B[3] = 10
and
C[0] = 4
C[1] = 6
C[2] = 7
C[3] = 10
C[4] = 2
答案是4。
解释:
C[0] is falling in the range of (A[0],B[0]) and (A[1],B[1])
C[1] is falling in the range of (A[2],B[2])
C[2] is of no use
C[3] is falling in the range of (A[3],B[3])
so the total is 4
我的方法:
传统方法:简单循环数组A 中C 的每个元素,如果在该范围内找到,则将A[i] 和B[i] 的值设置为减去无穷大或删除它们(对于 Arraylist)。
- 时间复杂度是一个问题,所以不是一个好方法。
HashTable:将值存储在哈希表中,A[i] 作为键,B[i] 作为值。然后找到给定C[i] 的元素并删除键。我认为这不是一个好方法
请为此提供一个有效的算法。
【问题讨论】:
-
你可以多次使用同一个范围吗?
-
@Dici 你能解释一下我没有得到你
-
例如,如果 C[1] 为 3,即使 range (A[0],B[0]) 已经用于 C[0],你能用它吗?
-
如果您能区分概念和实现,这将有助于使问题易于理解。数组是具有order 的东西。在您的情况下,间隔和点没有顺序。您有一个 set 间隔(带有起点和终点)和一组点。用数组实现集合很好,但这与您的问题完全无关。