2014-05-02 8 views
1

Данный тест codility ниже:Пожалуйста, помогите мне понять этот тест codility

Дан массив A из N целых чисел, мы рисуем N диски в 2D плоскости, что I -м диск по центру (0,I) и имеет радиус A[I]. Мы говорим, что J-й диск и K -th disc intersect if J ≠ K and J -th and K`-th диски имеют как минимум одну общую точку .

Написать функцию class Solution { public int solution(int[] A); }, что, учитывая массив, описывающий AN диски, как описано выше, возвращает число пар пересекающихся дисков. Например, с учетом 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 элементов?

+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) }.
Поскольку пересечение этих 2 наборов пуст - (0,0);(0,5) не является допустимой парой дисков и не должно быть включено.

+0

Благодарим вас за четкое объяснение. :) –

0

Одиннадцать пар точно так же, как указано в вопросе. Каждый диск центрируется на (0, I), поэтому каждый диск является 1 единицей расстояния от каждого из двух его соседей (кроме диска 0 и диска N-1, который имеет только один сосед). С конкретным массивом Данный:

  • диск 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, что считается одним), это доходит до 11 пересечений.

Смежные вопросы