给定排序列表确定三角形的存在

时间:2013-04-07 16:06:20

标签: algorithm computational-geometry

我遇到了关于确定三角形的问题,它说:

  

给定一个排序整数数组(长度为n),确定是否可以   通过从数组中选择三个整数来构建一个三角形   答案是“是”或“否”。

一个天真的解决方案是通过扫描所有可能性,但结果是O(n ^ 3),似乎  它将是C(n,3)的可能性。

1 个答案:

答案 0 :(得分:3)

假设整数表示边长,而数组(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),可以很容易地转换为(不太优雅但性能更高)的迭代解决方案。