题目:给定一组长短不一的棍子,求能组成的周长最长的三角形。
分析:
能够组成三角形的条件 : 最长边 < 中等边 + 最短边
遍历需要的时间复杂度太高O(n3),不可接受。
对边长数组进行排序,从右往左扫描,若相邻的三条变能组成三角形,则为最长周长三角形,否则不能组成三角形,继续往左扫描。
public static int getLongestTriangle(int[] edges) {
if (edges == null || edges.length < 3) {
return 0;
}
Arrays.sort(edges);
for (int i = edges.length - 1; i >= 2; i--) {
int longEdge = edges[i];
int midEdge = edges[i - 1];
int shortEdge = edges[i - 2];
if (midEdge + shortEdge > longEdge) {
System.out.println("long:" + longEdge + " mid: " + midEdge + " short: " + shortEdge);
return longEdge + midEdge + shortEdge;
}
}
return 0;
}