1. 程式人生 > 實用技巧 >976三角形的最大周長

976三角形的最大周長

題目

給定由一些正數(代表長度)組成的陣列 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

思路

題目中說面積不為零的意思就是可以構成三角形,構成三角形的條件是任意兩邊和大於第三邊,排好序後兩條最小邊和大於第三邊即滿足條件。

  1. 判斷陣列長度,長度小於3,則肯定構不成三角形,返回零
  2. 長度大於等於3,對陣列從小到大排序
  3. 迴圈條件,陣列長度大於等於3
    每次取陣列的後三個數得到三個最大的數;
    判斷是否滿足兩條小邊和大於第三邊,滿足求和返回周長;
    不滿足則陣列本身等於原陣列去掉最大的一個數;
    陣列長度減一;繼續迴圈
  4. 迴圈結束,返回零

程式碼

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