↓快轉到主要內容
  1. LeetCode/

LeetCode 976: Largest Perimeter Triangle

·1 分鐘· ·
LeetCode Easy Math Greedy Sorting Geometry Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2026-01-29

  • 提交紀錄:Wrong Answer → Time Limit Exceeded → Accepted ×3

解題思路
#

排序後,三條邊 a <= b <= c 能組成三角形 ⇔ a + b > c。

固定最長邊 c = nums[i] 時,最好的另外兩條邊是緊鄰在它前面的兩條 nums[i - 1]、nums[i - 2]:它們是比 c 小的裡面最大的,和最大,最可能 > c,周長也最大。如果連它們都不行,換更小的也不行,只能把最長邊往下換。

所以從最大的開始,看連續的三條邊,第一個成立的就是答案。

我的嘗試
#

前兩版想用兩個指針分別管「最長邊」和「另外兩條邊」,指針移動的邏輯寫亂了:

  • 第一版會算出不是三角形的組合。例如 [1, 1, 3, 4]:沒有任何三條能組成三角形,答案是 0,回傳 3。
  • 第二版改了條件,但有些情況指針都不動,例如 [8, 8, 1, 7] 會無窮迴圈,TLE。

想清楚「最長邊固定時,配最大的兩條就好」之後,只要一個迴圈。

正確解法
#

class Solution:
    def largestPerimeter(self, nums: List[int]) -> int:
        nums.sort()
        for i in range(len(nums) - 1, 1, -1):
            if nums[i - 2] + nums[i - 1] > nums[i]:
                return nums[i - 2] + nums[i - 1] + nums[i]
        return 0

複雜度
#

時間 O(n log n),空間 O(1)(不算排序)。

要特別避免的錯誤
#

  • 三角不等式是嚴格大於。
  • 不需要雙指針:最長邊固定時,緊鄰的兩條一定最好。

面試口說整理
#

排序後,最長邊固定時,最好的另外兩條就是緊鄰在它前面的兩條,因為它們的和最大。所以我從最大的開始看連續的三條邊,第一個滿足 a + b > c 的就是最大周長,都不行就回傳 0。時間 O(n log n)。

相關文章

LeetCode 1030: Matrix Cells in Distance Order
·1 分鐘
LeetCode Easy Array Math Geometry Sorting
LeetCode 1030 解題筆記:列出所有座標,按到中心的曼哈頓距離排序;回傳的是座標,不是距離
LeetCode 3627: Maximum Median Sum of Subsequences of Size 3
·1 分鐘
LeetCode Medium Math Greedy Sorting Game-Theory Array
LeetCode 3627 解題筆記:排序後每次拿最大的兩個和最小的一個,中位數是第二大的;答案是從尾端往前每隔一個取,共 n / 3 個
LeetCode 3074: Apple Redistribution into Boxes
·1 分鐘
LeetCode Easy Array Greedy Sorting
LeetCode 3074 解題筆記:箱子可以隨便分,所以從容量最大的箱子開始拿,總容量夠裝所有蘋果就停
LeetCode 2335: Minimum Amount of Time to Fill Cups
·1 分鐘
LeetCode Easy Array Greedy Sorting Heap-Priority-Queue
LeetCode 2335 解題筆記:答案是 max(最多的那種, ceil(總數 / 2));模擬的話每秒從最多的兩種各裝一杯
LeetCode 2357: Make Array Zero by Subtracting Equal Amounts
·1 分鐘
LeetCode Easy Array Hash-Table Greedy Sorting
LeetCode 2357 解題筆記:每次操作會讓最小的正數那一群變成 0,所以次數就是不同的正數有幾種
LeetCode 1005: Maximize Sum Of Array After K Negations
·1 分鐘
LeetCode Easy Array Greedy Sorting
LeetCode 1005 解題筆記:每次把最小的數變號;最小的已經是正數時,剩下的次數只要看奇偶