976-三角形的最大周長

Null發表於2019-01-19

前言

Weekly Contest 119三角形的最大周長

給定由一些正數(代表長度)組成的陣列 A,返回由其中三個長度組成的、面積不為零的三角形的最大周長。

如果不能形成任何面積不為零的三角形,返回 0

示例1:

輸入:[2,1,2]
輸出:5

示例2:

輸入:[1,2,1]
輸出:0

示例3:

輸入:[3,2,3,4]
輸出:10

示例4:

輸入:[3,6,2,3]
輸出:8

提示:

  1. 3 <= A.length <= 10000
  2. 1 <= A[i] <= 10^6

解題思路

本題可以拆成兩個問題去分析:

  1. 三條邊能否構成三角形
  2. 找出構成的三角形中周長最大的三角形

問題1可以利用三角形的特性:三角形的兩邊之和大於第三邊,即已知存在一個三角形,三條邊分別為abc,則同時滿足a+b>ca+c>bb+c>a
而問題只是一個簡單的判斷邏輯,並不複雜。這裡可以結合問題1中三角形的特性來優化判斷邏輯,詳細內容請看實現程式碼

實現程式碼

    /**
     * 976. 三角形的最大周長
     * 判斷能否組成三角形的方法是兩邊之後要大於第三邊
     * @param A
     * @return
     */
    public int largestPerimeter(int[] A) {
        int result=0;
        //陣列進行排序(從小到大)
        Arrays.sort(A);
        //倒序訪問陣列,取出三個數字嘗試構建三角形
        for(int i=A.length-1;i>=0;i--){
            if(i-2>=0){//剩餘可用的邊個數要不小於3個
                int a=A[i];
                int b=A[i-1];
                int c=A[i-2];
                //判斷三條邊能否組成三角形,判斷條件為兩之和大於第三邊
                if(a+b>c && a+c>b && b+c>a){
                    result=a+b+c;//直接找到能夠構成最大周長三角形的3條邊,中斷迴圈
                    break;
                }
            }else{//剩餘的邊個數不夠中斷迴圈
                break;
            }
        }
        return result;
    }

相關文章