我被困在解決隨後的採訪實踐問題:
我必須寫一個函數:如何知道陣列中存在三角形三元組?
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