iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
自我挑戰組

Leetcode 小白練功坊系列 第 15

[DAY15]976. Largest Perimeter Triangle

  • 分享至 

  • xImage
  •  

題目連結(https://leetcode.com/problems/largest-perimeter-triangle/submissions/1785465186/?envType=daily-question&envId=2025-09-28)

Given an integer array nums, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0.

今天又是三角形了!每日一題好像每週會相關?下週再觀察一下是不是真的有規律😅

1. Repeat(題目重複確認)

  • 輸入:整數陣列
  • 輸出:最長的周長,三角形面積要是非零,表示說是合理的三角形,如果構成不了三角形,就回傳0
  • 前提:
    • 3 <= nums.length <= 104
    • 1 <= nums[i] <= 106

2. Examples(舉例確認理解)

Input: nums = [2,1,2]
Output: 5
Explanation: You can form a triangle with three side lengths: 1, 2, and 2.

3. Approach(解題思路)

方法

  • 構成三角形的條件
  • 時間複雜度:O(n log n)(主要是排序)
  • 空間複雜度:O(1)

4. Code(C++)

class Solution {
public:
    int largestPerimeter(vector<int>& nums) {
        if(nums.size() < 3) return 0;
        
        sort(nums.begin(), nums.end());
        int n = nums.size() - 1;
        // 從最大的三個數開始檢查,往前遍歷
        for(int i = n; i >= 2; i--) {
            // 檢查 nums[i-2], nums[i-1], nums[i] 是否能組成三角形
            // 由於陣列已排序,只需檢查 nums[i-2] + nums[i-1] > nums[i]
            if(nums[i-2] + nums[i-1] > nums[i]) {
                return nums[i-2] + nums[i-1] + nums[i];
            }
        }
        
        return 0;
    }
};

5. Test 範例


6. 相關題目與延伸概念

280. Wiggle Sort

874. Walking Robot Simulation

1086. High Five

7. 補充:語法&注意事項

sort(nums.begin(), nums.end())

ps. 部分內容經 AI 協助整理


上一篇
[DAY14] 812. Largest Triangle Area
系列文
Leetcode 小白練功坊15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言