Я застрял в решении следующего практического вопроса собеседования:
Мне нужно написать функцию:
int triangle(int[] A);
, которая для массива A с нулевым индексом, состоящего из . Функция должна вернуть Например, для данного массива функция должна возвращать Для массива функция должен вернуть Если я сделаю тройной цикл, это будет очень-очень медленным (сложность: N
целых чисел, возвращает 1
, если существует тройка (P, Q, R) такая, что 0
A[P] + A[Q] > A[R],
A[Q] + A[R] > A[P],
A[R] + A[P] > A[Q].
0
, если такой тройки не существует. Предположим, что 0
[- 1 000 000..1 000 000]
. A
такой, что A[0]=10, A[1]=2, A[2]=5, A[3]=1, A[4]=8, A[5]=20
1
, потому что тройка (0, 2, 4)
удовлетворяет всем необходимым условиям. A
так, что A[0]=10, A[1]=50, A[2]=5, A[3]=1
0
. O (n ^ 3)
). Я думаю, может быть, использовать для хранения дополнительной копии массива и его сортировки, а также использовать двоичный поиск для определенного числа. Но я не знаю, как решить эту проблему.
Есть идеи?