【问题标题】:Determinate the existence of a triangle given a sorted list [closed]确定给定排序列表的三角形的存在[关闭]
【发布时间】:2013-04-07 16:06:20
【问题描述】:

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

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

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

【问题讨论】:

标签: algorithm computational-geometry


【解决方案1】:

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

【讨论】:

  • 我不明白三角形是什么意思;你能说明你的假设吗?我现在无法真正理解这一点。
  • 三角形(由其边长定义)是任意三倍边长,其中最长的严格小于两个较短的总和。也就是说,c a and c > b。
  • 啊,我明白了,当然;我在考虑图表
  • 下面的我们是不是也需要测试一下?
猜你喜欢
  • 2014-03-05
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多