请帮助我理解这种能力测试

时间:2014-05-02 21:22:56

标签: java algorithm

鉴于以下的鳕鱼测试:

  

给定AN整数的数组,我们在2D平面中绘制N个光盘,以便I -   光盘以(0,I)为中心,半径为A[I]。我们说J - 光盘和。{   K -th disc intersect if J≠K and 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个元素?

2 个答案:

答案 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:

  • disc 0的半径为1,因此它与光盘1相交
  • 盘1具有半径5,因此它与盘0,2,3,4,5
  • 相交
  • 盘2具有半径2,因此它与盘0,1,3,4
  • 相交
  • 盘3具有半径1,因此它与盘2,4相交
  • 盘4具有半径4,因此它与盘0,1,2,3,5
  • 相交
  • 光盘5的半径为0,因此它与无光盘相交

如果你只计算这个列表中的唯一对(例如2个与3和3​​相交的交叉点,其中2个相交,则计为1),这将转到11个交叉点。