【发布时间】:2011-08-09 22:41:37
【问题描述】:
给出了由 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。
假设:
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(1)
【问题讨论】:
-
听起来像是功课。到目前为止你在哪里?
-
其实是功课!我原本打算对它进行排序,但由于 0
-
为什么在你的问题中使用零索引的 C 样式数组,却要求函数接受向量作为参数? :)
-
您忽略了时间复杂度要求。如果没有要求,您可以只查看每个可能的 3 个元素集并对它们进行检查,但这是 O(N³)
-
@Jiri:想想当你以当前形式编译这个程序时会发生什么。在堆栈上,您只需为数组分配一个指针。
标签: c++