给定N个长度,确定是否可以在O(N)时间内形成三角形

时间:2017-11-12 12:11:00

标签: algorithm math computer-science adhoc

嗨,我在O(N)时间内难以解决这个问题。

输入由1到10 ^ 9之间的N个整数组成,输出应确定是否可以使用给定的任何3个值形成三角形。 N的极限达到10 ^ 8所以我的解决方案必须在O(N)时间运行。

所以我知道三角不等式,但使用不等式来比较所有数字将在O(NC3)时间运行,这将超过允许的复杂度?我可以在正确的解决方案上获得一些帮助吗?

1 个答案:

答案 0 :(得分:3)

三角不等式http://www

  

三角形任意两边的长度之和必须大于或等于第三边的长度。

这意味着:

  

最短两边的长度之和必须大于或等于最长边的长度。

因此我们依次获取(排序的)整数,并将其与前两个整数的总和进行比较。如果他们满足不平等,那么我们就找到了一个三角形。如果他们不满足,那么我们就知道没有更小的一对能够满足它。

此过程为O(N),但它需要对列表进行排序。通常,排序在O(N log N)中运行,但是如果你有一个有限域的整数,你理论上可以在O(N)中使用states(以O(N)内存为代价)。