查找正整数数组是否形成闭合的多边形

时间:2018-07-07 04:02:25

标签: java

我有一个非负整数数组,我需要查找它们是否形成闭合多边形。 (元素的顺序无关紧要)

数组元素代表边长。

解决问题后,我想到了以下解决方案。

让n表示数组的长度。

  • 对于n = 3:-我需要检查3个元素是否形成三角形。 (完成)
  • 对于n =大于3的偶数,我需要检查所有元素是否至少具有一对相等的对。 (完成)

例如arr = {2,3,4,4,3,2}:-它将形成一个封闭的多边形。

  • 其余的n值有问题。

请帮助我。 如果还有其他优化的解决方案,请告知。

对不起,我认为n =偶数且大于3时,我的解法是错误的。

2 个答案:

答案 0 :(得分:0)

请参阅:https://mathoverflow.net/a/96669

  

如果且且存在边长为{r_1,r_2,...,r_n}的闭合多边形   只有在

     

r_i≤P / 2,其中P是周长,即{1..n}中所有i的P = r_1 + r_2 + ... + r_n

答案 1 :(得分:0)

这里是 @LakshayGarg's 答案和链接的mathoverflow question中所示的算法的两个Java实现:

public static boolean checkValidClosedPolygon1(int[] lineLengths) {
  int maxLineLength = Arrays.stream(lineLengths).max().getAsInt();
  int halfOfsum = IntStream.of(lineLengths).sum() / 2;
  return maxLineLength < halfOfsum;
}

public static boolean checkValidClosedPolygon2(int[] lineLengths) {
  int maxLineLength = Arrays.stream(lineLengths).max().getAsInt();
  int sumMinusMax = IntStream.of(lineLengths).sum() - maxLineLength;
  return maxLineLength < sumMinusMax;
}