給定由一些正數(表明長度)組成的數組 A,返回由其中三個長度組成的、面積不爲零的三角形的最大周長。若是不能造成任何面積不爲零的三角形,返回 0java
三條邊組成面積不爲零的三角形的充分必要條件爲 a + b > c,所以咱們首先將數組升序排序,從最後三個開始枚舉,找出符合構成三角形的最大的三個數便可數組
class Solution { public int largestPerimeter(int[] A) { Arrays.sort(A); int a = A.length - 3, b = A.length - 2, c = A.length - 1; while(a >= 0) { if(A[a] + A[b] > A[c]) { return A[a] + A[b] + A[c]; } a--; b--; c--; } return 0; } }
時間複雜度:O(NlogN),其中 N 是數組 A 的長度code
空間複雜度:O(logN)排序