题目描述:给定由一些整数(代表长度)组成的数组A,返回由其中三个长度组成的,面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0.
示例1:
输入: [3, 2, 3, 4]
输出: 10
提示:
- 3 < A.length <= 10000
- 1 <= A[i] <= 10*6
思路:
- 对所有边进行排序
- 从最长的三条边开始招,这三条边之和是当前最大的
- 如果满足条件(前两条边之和大于第三边),此三条边之和就是最长的周长了
- 如果不满足的话,那么任意两条边相加也不可能大于最大的这条边了,舍弃最大的边,从步骤二开始重复。
代码:
Python 版
class Solution:
def largestPerimeter(self, A):
if len(A) < 3:
return 0
A.sort() # 排序,从小到大
for i in range(len(A)-1, 1, -1):
if A[i] < A[i-1] + A[i-2]:
return A[i] + A[i-1] + A[i-2]
return 0
Java 版
class 三角形的最大周长 {
public static void main(String[] args) {
int[] A = {2, 1, 2};
System.out.println(largestPerimeter(A));
for (int each : A){
System.out.print(each + " ");
}
}
public static int largestPerimeter(int[] A) {
Arrays.sort(A);
for (int i = A.length - 1; i >= 2; i--){
if (A[i] < A[i-1] + A[i-2]){
return A[i] + A[i-1] + A[i-2];
}
}
return 0;
}
}