# 三角形的最大周长(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
2
3
4
5
6
7