題目:三角形的最大周長
給定由一些正數(代表長度)組成的陣列 A,返回由其中三個長度組成的、面積不為零的三角形的最大周長。
如果不能形成任何面積不為零的三角形,返回 0。
複製程式碼
示例:
輸入:[2,1,2]
輸出:5
輸入:[1,2,1]
輸出:0
輸入:[3,2,3,4]
輸出:10
輸入:[3,6,2,3]
輸出:8
複製程式碼
思考:
這道題首先將陣列排序。
然後迴圈從後向前依次取最大的三個數判斷最大數是否小於剩下兩個數相加。
即是否可圍成三角形,如果可以即為要求結果,將三邊相加返回。若未找到滿足要求的三邊,返回0即可。
例如:[2,1,2,1,3,6]
排序後:[1,1,2,2,3,6]
第一次迴圈:2+3>6 ? false
第二次迴圈:2+2>3 ? true 返回2+2+3=7
雖然接下來三個數也滿足1+2>2但是因為排序過後,越向前數字越小,所以周長越短。
複製程式碼
實現:
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;
}
}複製程式碼