976三角形的最大周長
阿新 • • 發佈:2020-11-29
題目
給定由一些正數(代表長度)組成的陣列 A,返回由其中三個長度組成的、面積不為零的三角形的最大周長。
如果不能形成任何面積不為零的三角形,返回 0。
示例 1:
輸入:[2,1,2]
輸出:5
示例 2:
輸入:[1,2,1]
輸出:0
示例 3:
輸入:[3,2,3,4]
輸出:10
示例 4:
輸入:[3,6,2,3]
輸出:8
提示:
3 <= A.length <= 10000
1 <= A[i] <= 10^6
思路
題目中說面積不為零的意思就是可以構成三角形,構成三角形的條件是任意兩邊和大於第三邊,排好序後兩條最小邊和大於第三邊即滿足條件。
- 判斷陣列長度,長度小於3,則肯定構不成三角形,返回零
- 長度大於等於3,對陣列從小到大排序
- 迴圈條件,陣列長度大於等於3
每次取陣列的後三個數得到三個最大的數;
判斷是否滿足兩條小邊和大於第三邊,滿足求和返回周長;
不滿足則陣列本身等於原陣列去掉最大的一個數;
陣列長度減一;繼續迴圈 - 迴圈結束,返回零
程式碼
class Solution: def largestPerimeter(self, A: List[int]) -> int: A.sort() a_length = len(A) if a_length < 3: return 0 while a_length >= 3: san = A[-3:] if san[0] + san[1] > san[2]: return sum(san) A = A[:-1] a_length -= 1 return 0