# 三角形的最大周长(976)

# 题目

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回 0。

# 示例

输入:[2,1,2] 输出:5

输入:[1,2,1] 输出:0

输入:[3,2,3,4] 输出:10

输入:[3,6,2,3] 输出:8

# 提示

  • 3 <= A.length <= 10000
  • 1 <= A[i] <= 10^6

# 算法

三条边满足组成三角形的条件是:两条较短边的和大于较长边

所以我们从大到小排列数组A,此时我们只需比较A[i] < A[i+1] + A[i+2]是否成立即可,因为当上式成立时,A[i] < A[i+m] + A[i+n]一定成立(因为A[i+m]A[i+n]小于A[i+1]A[i+2]),且题目要求求最大周长,所以只需比较当i确定时的最大的三个值是否满足题目要求,如果不满足则让i+1,即寻找次小的三个最大值

export const largestPerimeter = (A) => {
	A.sort((a, b) => b - a);
	for (let i = 0; i < A.length - 2; i++) {
		if (A[i] < A[i + 1] + A[i + 2]) return A[i] + A[i + 1] + A[i + 2];
	}
	return 0;
};
1
2
3
4
5
6
7