2014-05-02 117 views
1

下面給出的codility測試:請幫我理解這個codility測試

給出一個陣列NA整數,我們得出N光盤中的2D平面使得I個 盤集中在(0,I),半徑爲A[I]。我們說第J號光盤和 K -th disc intersect if J≠K and J -th and第K個光盤至少有一個共同點 點。

寫功能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 *日誌(N));
  • 預期最壞情況下的空間複雜度爲O(N),超出輸入存儲空間(不包括輸入參數所需的存儲空間)。

在哪裏這些11對從何而來,因爲只有6元?

+0

這些對來自兩個元素的30種可能的組合,使用給定的規則。 – keshlam

回答

1

只有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)不是一對有效的磁盤,因此不應包括在內。

+0

感謝您的明確解釋。 :) –

0

這11對完全與問題中列出的一樣。每張光盤的中心位置爲(0, I),因此每張光盤距離其兩個鄰居中的每一個(光盤0和光盤N-1只有一個鄰居除外)爲1個距離單位。與特定的陣列A中給出:

  • 盤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個交點。