鉴于以下的鳕鱼测试:
给定
A
个N
整数的数组,我们在2D平面中绘制N
个光盘,以便I
- 光盘以(0,I)
为中心,半径为A[I]
。我们说J
- 光盘和。{ K-th disc intersect if
J≠Kand
J-th and
K`-disc至少有一个共同点 点。写一个给定数组的函数
class Solution { public int solution(int[] A); }
如上所述,A
描述N
个光盘,返回相交的对数 光盘。例如,给定N=6
和:
A[0] = 1 A[1] = 5 A[2] = 2
A[3] = 1 A[4] = 4 A[5] = 0
相交光盘出现在 11对元素:
中0和1,
0和2,
0和4,
1和2,
1和3,
1和4,
1和5,
2和3,
2和4,
3和4,
4和5。所以函数应该返回
11
。如果交叉对的数量超过10,000,000,则该函数应返回
−1
假设:-
N
是[0..100,000]
范围内的整数;
- 数组A的每个元素都是[0..2147483647]范围内的整数。复杂性
- 预期的最坏情况时间复杂度为O(N * log(N));
- 预期的最坏情况空间复杂度是O(N),超出输入存储(不计算 输入参数所需的存储空间)。
这11对来自哪里,因为只有6个元素?
答案 0 :(得分:2)
只有6个元素,但可能的对数是6*5/2=15
(一般形式:n(n-1)/2)
),所以即使有6个点,也可能有多达15个(包括)交叉点,如上所述。
磁盘数量不是最大值15,因为某些磁盘'不相交,例如,磁盘(0,0)
和磁盘(0,5)
没有共同点。 (0,0)
包含点{(0,0), (0,1)}
,(0,5)
磁盘包含点{ (0,5) }
。
由于这两组的交集是空的 - (0,0);(0,5)
不是有效的磁盘对,因此不应包括在内。
答案 1 :(得分:0)
这11对完全如问题所列。每个光盘都以(0, I)
为中心,因此每个光盘距其两个邻居中的每一个都是1个距离单位(除了光盘0和光盘N-1,它们只有一个邻居)。使用特定的数组A:
如果你只计算这个列表中的唯一对(例如2个与3和3相交的交叉点,其中2个相交,则计为1),这将转到11个交叉点。