Данный тест codility ниже:Пожалуйста, помогите мне понять этот тест codility
Дан массив
A
изN
целых чисел, мы рисуемN
диски в 2D плоскости, чтоI
-м диск по центру(0,I)
и имеет радиусA[I]
. Мы говорим, чтоJ
-й диск и K-th disc intersect if
J ≠ Kand
J-th and
K`-th диски имеют как минимум одну общую точку .Написать функцию
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
Пересекающиеся диски появляются в одиннадцать пар элементов:
0 и 1,
0 и 2,
0 и 4,
1 и 2,
1 и 3,
1 и 4,
1 и 5,
2 и 3,
2 и 4,
3 и 4,
4 и 5.поэтому функция должна возвращать
11
.Функция должна возвращать
−1
, если число пересекающихся пар превышает 10 000 000.
Предположим, что:-
N
представляет собой целое число в диапазоне[0..100,000]
;
- Каждый элемент массива A является целым числом в пределах диапазона [0..2147483647].Сложность
- Ожидаемое в худшем случае сложность O (N * Log (N));
- Ожидаемая наихудшая сложность пространства - это O (N), за пределами хранения ввода (не считая хранения , необходимого для входных аргументов).
Откуда берутся эти одиннадцать пар, так как существует только 6 элементов?
Эти пары относятся к выбору из 30 возможных комбинаций из двух элементов, используя заданное правило. – keshlam