在数组中找到三角形三元组

时间:2011-08-21 14:36:55

标签: c++ arrays triangular

  

可能重复:
  finding triangulars from array

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

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

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

三元组(P,Q,R)是三角形if和

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)

清楚地排序数组不是一种选择。关于如何解决这个问题的任何想法?

0 个答案:

没有答案