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

Algorithm 给定N个长度,确定是否有可能在O(N)时间内形成三角形,algorithm,math,computer-science,adhoc,Algorithm,Math,Computer Science,Adhoc,嗨,我在O(N)时间内解决这个问题有困难 输入由N个值介于1-10^9之间的整数组成,输出应确定是否可以使用给定的任意3个值形成三角形。 N的极限达到10^8,因此溶液必须在O(N)时间内运行 所以我知道三角形不等式,但是用这个不等式来比较所有的数字需要O(NC3)时间,这会超过允许的复杂度吗?我能得到一些关于正确解决方案的帮助吗 三角形不等式: 三角形任意两条边的长度之和必须大于或等于第三条边的长度 这意味着: 最短两侧的长度之和必须大于或等于最长一侧的长度 因此,我们依次取(排序的)整数,并

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

输入由N个值介于1-10^9之间的整数组成,输出应确定是否可以使用给定的任意3个值形成三角形。 N的极限达到10^8,因此溶液必须在O(N)时间内运行

所以我知道三角形不等式,但是用这个不等式来比较所有的数字需要O(NC3)时间,这会超过允许的复杂度吗?我能得到一些关于正确解决方案的帮助吗

三角形不等式:

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

这意味着:

最短两侧的长度之和必须大于或等于最长一侧的长度

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


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

例如,不可能与任何3个整数3 1 4 7形成三角形,但如果对整数进行排序,则可以与整数6 7 8 9 10形成三角形解决方案相对简单-所以我猜它们没有被分类?@ArnaudDenoyelle:1000 1 3,两个最大的是1000和3,最小的是1,单独分析它们会说没有三角形是可能的。整数没有排序,但我认为在解决方案仍然有效之前对输入进行排序acceptable@BryanJuniano-排序通常需要O(N log N)。如果可以的话,我会发布一个答案。