[LeetCode] 2971. Find Polygon With the Largest Perimeter


題目說明

給定一個由正整數組成的陣列 nums,長度為 n。

從裡面能夠建構出來多邊形的最大周長是多少?

範例測試資料說明

範例 1:

輸入:nums = [5,5,5]
輸出:15
解釋:唯一可能由 nums 構成的多邊形有 3 個邊:5、5 和 5。
周長為 5 + 5 + 5 = 15。

範例 2:

輸入:nums = [1,12,1,2,5,50,3]
輸出:12
解釋:由 nums 構成的最大周長多邊形有 5 個邊:1、1、2、3 和 5。周長為 1 + 1 + 2 + 3 + 5 = 12。
無法構成以 12 或 50 為最長邊的多邊形,因為無法包含 2 個或更多邊長之和大於它們的其他邊。
可證明最大可能的周長為 12。

範例 3:

輸入:nums = [5,5,50]
輸出:-1
解釋:無法從 nums 構成多邊形,因為多邊形至少有 3 個邊,而 50 > 5 + 5。

解法 :

  1. 排序陣列由小到大
  2. 走訪每個元素
  3. 如果當前 num 小於 sum 的話,可能是當前最大周長,並且記錄結果
  4. 走訪完畢後,將最終結果輸出

Code 如下:

public long largestPerimeter(int[] nums) {
    Arrays.sort(nums);
    long sum = 0;
    long result = -1;
    for (int num : nums) {
        // 如果當前元素小於 sum,則當前元素與前面的和可能是周長
        if (num < sum) {
            result = num + sum;
        }
        sum += num;
    }
    return result;
}