本文共 939 字,大约阅读时间需要 3 分钟。
给定一个由正数(代表长度)组成的数组 A,您需要找到其中三个长度,它们可以组成一个面积不为零的三角形,并且这个三角形的周长最大。如果不能找到这样的三角形,应返回0。
为了找到面积不为零且周长最大的三角形,我们可以使用贪心算法。以下是详细的步骤:
排序数组:首先对数组进行排序,以便更方便地找到最长的边。
选择最长的三条边:从最大的三条边开始检查,判断是否满足三角形不等式。如果满足,这三条边即为答案;如果不满足,去掉最大的边,从剩下的三条边中重复检查。
重复上述过程:每次去掉最大的边,选择剩下的三条边,直到满足三角形不等式或遍历结束。
public class Solution { public int largestPerimeter(int[] A) { Arrays.sort(A); int len = A.length; int maxPerimeter = 0; for (int i = len - 1; i >= 2; i--) { if (A[i - 2] + A[i - 1] > A[i]) { maxPerimeter = A[i] + A[i - 1] + A[i - 2]; break; } i--; } return maxPerimeter; }}
[2, 1, 2]
排序后:1, 2, 2
最长的三边为2,2,1。检查:2 + 1 > 2 成立,周长5。[1, 2, 1]
排序后:1, 1, 2
检查发现1 + 1 ≤ 2,无法组成三角形,返回0。[3, 2, 3, 4]
排序后:2, 3, 3, 4
最长的三边4,3,3。检查:3 + 3 > 4 成立,周长10。[3,6,2,3]
排序后:2, 3, 3, 6
最长的三边6,3,3。检查:3 + 3 ≤ 6,不满足。去掉6,检查3,3,2:3 + 2 > 3,周长8。转载地址:http://urgyk.baihongyu.com/