题目:三角形的最大周长
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
示例:
输入:[2,1,2]
输出:5
输入:[1,2,1]
输出:0
输入:[3,2,3,4]
输出:10
输入:[3,6,2,3]
输出:8
思考:
这道题首先将数组排序。
然后循环从后向前依次取最大的三个数判断最大数是否小于剩下两个数相加。
即是否可围成三角形,如果可以即为要求结果,将三边相加返回。若未找到满足要求的三边,返回0即可。
例如:[2,1,2,1,3,6]
排序后:[1,1,2,2,3,6]
第一次循环:2+3>6 ? false
第二次循环:2+2>3 ? true 返回2+2+3=7
虽然接下来三个数也满足1+2>2但是因为排序过后,越向前数字越小,所以周长越短。
实现:
class Solution {
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for (int i = A.length - 3; i >= 0; --i)
if (A[i] + A[i+1] > A[i+2])
return A[i] + A[i+1] + A[i+2];
return 0;
}
}