题目:
给定由一些正数(代表长度)组成的数组 A
,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-perimeter-triangle
思路:
我们将数组A按从大到小的顺序排序,然后从头往后三个三个的撸,只要这三个中较小的两个的和大于最大就可以组成一个三角形。
简单分析一下为什么只用考虑两个的和大于最大的就可以:
假设有a<b<c<d<e,取其中的c,d,e,d-c的最大值是d(即c为0的时候),而d又小于e,所以d-c小于e是恒成立的。
代码:
import java.util.*; import java.math.*; 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; } } public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] A = new int[n]; for(int i=0; i<n; i++){ A[i] = scanner.nextInt(); } Solution solution = new Solution(); System.out.println(solution.largestPerimeter(A)); } }