我被困在解决随后的采访实践问题:
我必须写一个函数:如何知道阵列中存在三角形三元组?
int triangle(int[] A);
,鉴于一种零索引数组A由N
整数返回1
如果存在三重(P ,Q,R),例如0 < P < Q < R < N
。
A[P] + A[Q] > A[R],
A[Q] + A[R] > A[P],
A[R] + A[P] > A[Q].
如果这样的三元组不存在,该函数应返回0
。假设0 < N < 100,000
。假定数组中的每个元素都是范围为[-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)
)。我想也许用来存储数组的额外副本并对其进行排序,并使用二进制搜索特定数字。但我不知道如何解决这个问题。
任何想法?
(0,2,4)不适合:0 + 2不是> 4. – Vlad 2011-03-22 12:32:42
他提及索引号码作为答案... 10,5,8 – 2011-03-22 12:33:21
第一个条件是否指向值PRQ或索引?因为如果P