【发布时间】:2013-04-07 16:06:20
【问题描述】:
我遇到了一个关于三角形确定的问题,它说:
给定一个排序的整数数组(长度为 n),确定你是否可以 通过从数组中选择三个整数来构建一个三角形, 答案是“是”或“否”。
一个天真的解决方案是扫描所有可能性,但结果是 O(n^3),似乎 这将是 C(n, 3) 种可能性。
【问题讨论】:
标签: algorithm computational-geometry
我遇到了一个关于三角形确定的问题,它说:
给定一个排序的整数数组(长度为 n),确定你是否可以 通过从数组中选择三个整数来构建一个三角形, 答案是“是”或“否”。
一个天真的解决方案是扫描所有可能性,但结果是 O(n^3),似乎 这将是 C(n, 3) 种可能性。
【问题讨论】:
标签: algorithm computational-geometry
假设整数表示边长且array(0) > 0,
bool IsTriangle(int[] aray, int start) {
if(array.length - start <= 2) return false;
return (array(start+2) < array(start+1) + array(start+0))
|| IsTriangle(array,start+1);
}
这是有效的,因为整数列表是排序的;因此,使用数组的任何后续元素,RHS 将始终较大,而使用数组的任何先前元素,LHS 将始终较小,因此只有选择的三个连续元素满足三角不等式才能满足三角不等式。这当然是 O(n) 并且可以很容易地转换为(不太优雅但性能更高的)迭代解决方案。
【讨论】: