
[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。
解法 :
- 排序陣列由小到大
- 走訪每個元素
- 如果當前 num 小於 sum 的話,可能是當前最大周長,並且記錄結果
- 走訪完畢後,將最終結果輸出
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;
}