976. 三角形的最大周长(巧妙的贪心+排序)

24 篇文章 0 订阅
5 篇文章 0 订阅

给定由一些正数(代表长度)组成的数组 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)。所以如果相邻的数构不成三角形,就不需要再固定第三个数并往前找两个数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值