前言Weekly Contest 119的 三角形的最大周长:给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。示例1:输入:[2,1,2]输出:5示例2:输入:[1,2,1]输出:0示例3:输入:[3,2,3,4]输出:10示例4:输入:[3,6,2,3]输出:8提示:3 <= A.length <= 100001 <= A[i] <= 10^6解题思路本题可以拆成两个问题去分析:三条边能否构成三角形找出构成的三角形中周长最大的三角形问题1可以利用三角形的特性:三角形的两边之和大于第三边,即已知存在一个三角形,三条边分别为a、b、c,则同时满足a+b>c、a+c>b和b+c>a。而问题只是一个简单的判断逻辑,并不复杂。这里可以结合问题1中三角形的特性来优化判断逻辑,详细内容请看实现代码实现代码 /** * 976. 三角形的最大周长 * 判断能否组成三角形的方法是两边之后要大于第三边 * @param A * @return */ public int largestPerimeter(int[] A) { int result=0; //数组进行排序(从小到大) Arrays.sort(A); //倒序访问数组,取出三个数字尝试构建三角形 for(int i=A.length-1;i>=0;i–){ if(i-2>=0){//剩余可用的边个数要不小于3个 int a=A[i]; int b=A[i-1]; int c=A[i-2]; //判断三条边能否组成三角形,判断条件为两之和大于第三边 if(a+b>c && a+c>b && b+c>a){ result=a+b+c;//直接找到能够构成最大周长三角形的3条边,中断循环 break; } }else{//剩余的边个数不够中断循环 break; } } return result; }