我有一个非负整数数组,我需要查找它们是否形成闭合多边形。 (元素的顺序无关紧要)
数组元素代表边长。
解决问题后,我想到了以下解决方案。
让n表示数组的长度。
例如arr = {2,3,4,4,3,2}:-它将形成一个封闭的多边形。
请帮助我。 如果还有其他优化的解决方案,请告知。
对不起,我认为n =偶数且大于3时,我的解法是错误的。
答案 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;
}