0

可能重复:
从数组中查找三角形

我在这个论坛上发现了这个面试问题:http: //geeksforgeeks.org/forum/topic/check-for-triangular-triplet

我正在复制下面的描述(由 geeksforgeeks.org 和原始海报 Kapil 提供)

给出了一个由 N 个整数组成的零索引向量 A。

三元组 (P, Q, R) 是三角形的,如果并且

A[P] + A[Q] > A[R],
A[Q] + A[R] > A[P],
A[R] + A[P] > A[Q].

例如,考虑向量 A 使得

A[0] = 10 A[1] = 2 A[2] = 5

A[3] = 1 A[4] = 8 A[5] = 20

三元组 (0, 2, 4) 是三角形的。

编写一个程序:

int triangle(const vector<int> &A);

这样,给定一个由 N 个整数组成的向量 A,如果该向量存在三角形三元组,则返回 1,否则返回 0。

编辑:不应修改输入向量。并且需要 O(1) 空间要求,因此我们无法复制数组!

假使,假设:

N 是 [0..100,000] 范围内的整数;向量 A 的每个元素都是 [-2,147,483,648..2,147,483,647] 范围内的整数。

例如,给定向量 A 使得

A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 20

如上所述,该函数应返回 1。

另一个例子:

给定向量 A 使得

A[0] = 10 A[1] = 50 A[2] = 5
A[3] = 1

该函数应返回 0。

预期最坏情况时间复杂度:O(n log n) 预期最坏情况空间复杂度:O(1)

显然,对数组进行排序不是一种选择。关于我们如何解决这个问题的任何想法?

4

0 回答 0