嗨,我在O(N)时间内难以解决这个问题。
输入由1到10 ^ 9之间的N个整数组成,输出应确定是否可以使用给定的任何3个值形成三角形。 N的极限达到10 ^ 8所以我的解决方案必须在O(N)时间运行。
所以我知道三角不等式,但使用不等式来比较所有数字将在O(NC3)时间运行,这将超过允许的复杂度?我可以在正确的解决方案上获得一些帮助吗?
答案 0 :(得分:3)
三角不等式http://www:
三角形任意两边的长度之和必须大于或等于第三边的长度。
这意味着:
最短两边的长度之和必须大于或等于最长边的长度。
因此我们依次获取(排序的)整数,并将其与前两个整数的总和进行比较。如果他们满足不平等,那么我们就找到了一个三角形。如果他们不满足,那么我们就知道没有更小的一对能够满足它。
此过程为O(N),但它需要对列表进行排序。通常,排序在O(N log N)中运行,但是如果你有一个有限域的整数,你理论上可以在O(N)中使用states(以O(N)内存为代价)。