给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:nums = [2,1,2]
输出:5
示例 2:
输入:nums = [1,2,1]
输出:0
【代码】:
var largestPerimeter = function(A) {
A.sort((a, b) => a - b);
for (let i = A.length - 1; i >= 2; --i) {
if (A[i - 2] + A[i - 1] > A[i]) {
return A[i - 2] + A[i - 1] + A[i];
}
}
return 0;
};
注:
如果 A[i-2] + A[i-1] <= A[i] ,这三个数一定不能构成三角形,而A[i-3]以及更往前的数,都小于等于A[i-2],所以再往前取任何两个数只会让相加的值更小,就更不能满足 A[j] + A[k] > A[i]了 (j<i-2, k<i-1, j<k)。所以如果相邻的数构不成三角形,就不需要再固定第三个数并往前找两个数了。