三角形的最大周长

184 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情

题目描述

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。(出自力扣)

  • 示例1
输入: nums = [2,1,2]
输出: 5
  • 示例2
输入: nums = [1,2,1]
输出: 0

提示:

  • 3 <= nums.length <= 104
  • 1 <= nums[i] <= 106

思路分析

根据题意可知,我们的目的是要求一个三角形的最大周长,那么我们首先要知道三角形的周长计算以及三角形的知识;假设三角形的三条边是a、b、c,c是三条边中最长的那条,那么,三条边必须满足这个条件:a + b > c;否则,三条边组成的就不是三角形了。
首先,我们需要将整个数组按照从小到大进行排序,从数组取出三个最大的数字进行判断,若是满足成为三角形的条件那么就可以了,三个最大的数字必定是连续的,为了提高效率,我们可以从后面开始进行循环,取到A[i - 1]A[i-2]A[i]三个最大的数字,若是满足A[i - 1] + A[i-2] > A[i],那么这三个数字就能组成三角形,也就是能组成的三角形最大的周长了,即可将三个数字相加之和返回出去,就是return A[i−2]+A[i−1]+A[i];若是直至循环结束还没有满足这个条件,说明整个数组中没有任何三个数字能组成一个三角形,那么就可以返回0;

AC代码

let arr = [3,4,63,7,7,7]
function perimeter( arr ){
    arr.sort((a, b) => a - b);
    let length = arr.length;
    for(let i=length-1; i>=2; i--) {
        if(arr[i-2] + arr[i-1] > arr[i]) {
            return arr[i-2] + arr[i-1] + arr[i];
        }
    }
    return 0;
}
perimeter( arr )

总结

这道题主要就是一道计算题,只要我们拍好序,无论是正序还是倒序,符合条件的三个数一定是连在一起的三位数。