题目链接
解题思路
- 假设
a <= b <= c,我们知道三角形的三个边需要满足a + b > c - 贪心法,我们可以选择枚举最长边
c,那么a,b一定是选小于c的最大的两个数,此时最有可能满足a + b > c且此时三角形的周长是最大的 - 因此,首先对数组进行拍寻,倒序枚举第
i个数最为最长边,然后判断A[i - 2] + A[i - 1] > A[i],如果满足,返回A[i - 2] + A[i - 1] + A[i] - 如果对任何数作为最长边都不存在面积不为零的三角形,就返回
0
AC代码
class Solution {
public int largestPerimeter(int[] A) {
Arrays.sort(A);
for (int 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;
}
}
本地测试代码
package com.company;
import java.util.Arrays;
public class Solution_976 {
public static int largestPerimeter(int[] A) {
Arrays.sort(A);
for (int 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;
}
public static void main(String[] args) {
System.out.println(largestPerimeter(new int[]{2, 1, 2}));
System.out.println(largestPerimeter(new int[]{1, 2, 1}));
System.out.println(largestPerimeter(new int[]{3, 2, 3, 4}));
System.out.println(largestPerimeter(new int[]{3, 6, 2, 3}));
}
}