【发布时间】:2014-05-02 21:22:55
【问题描述】:
鉴于下面的代码测试:
给定
N整数数组A,我们在二维平面中绘制N圆盘,使得I-th 圆盘以(0,I)为中心,半径为A[I]。我们说J-th 光盘和 K-th disc intersect ifJ ≠ KandJ-th andK`-th 盘至少有一个公共 观点。写一个函数
class Solution { public int solution(int[] A); },给定一个数组A描述N圆盘如上所述,返回相交对的数量 光盘。例如,给定N=6和:
A[0] = 1 A[1] = 5 A[2] = 2A[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 个元素?
【问题讨论】:
-
这些对来自使用给定规则从两个元素的 30 种可能组合中进行选择。
-
我相信我们需要在这里考虑组合而不是排列。因此,这些对来自于从
C(n,r)=C(6,2)中两个元素的 15 种可能组合中进行选择