可能重复:
从数组中查找三角形
我在这个论坛上发现了这个面试问题: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)
显然,对数组进行排序不是一种选择。关于我们如何解决这个问题的任何想法?