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

Java 查找正整数数组是否形成闭合多边形,java,Java,我有一个非负整数数组,我需要找到它们是否形成闭合多边形。(元素的顺序无关紧要) 数组的元素表示边长 在解决了这个问题后,我想出了以下解决办法 设n表示数组的长度 对于n=3:-我需要检查3个元素是否形成三角形。(已完成) 对于n=大于3的偶数:-我需要检查所有元素是否至少有一对相等。(已完成) 例如arr={2,3,4,4,3,2}:-它将形成一个闭合多边形 对于n的其余值,我有一个问题 请帮帮我。 如果有其他优化的解决方案,请告诉我 对不起,对于n=偶数且大于3,我认为我的解决方案是错

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

数组的元素表示边长

在解决了这个问题后,我想出了以下解决办法

设n表示数组的长度

  • 对于n=3:-我需要检查3个元素是否形成三角形。(已完成)
  • 对于n=大于3的偶数:-我需要检查所有元素是否至少有一对相等。(已完成)
例如arr={2,3,4,4,3,2}:-它将形成一个闭合多边形

  • 对于n的其余值,我有一个问题
请帮帮我。 如果有其他优化的解决方案,请告诉我

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

请参阅:

边长为{r_1,r_2,…,r_n}的闭合多边形存在的条件是且 除非

鲁伊≤ P/2,其中P是周长,即P=r_1+r_2+…+对于{1..n}中的所有i


以下是答案中所示算法的两个java实现和链接:

公共静态布尔校验ValidClosedPolygon1(int[]线宽){
int maxLineLength=Arrays.stream(lineLength).max().getAsInt();
int halfOfsum=IntStream.of(线宽).sum()/2;
返回maxLineLength
此数组中的元素代表什么?它们代表边长吗?@LakshayGarg是的,它们代表边长。你可能想看看,谢谢,所以我需要两个循环,一个用于添加,另一个用于检查。是的,这是一种方法。
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;
}