摘要: LeetCode 976题要求从数组中找到能构成三角形的三个数,使其周长最大。解法采用降序排序后贪心判断,满足两边之和>第三边即可返回周长。时间复杂度O(nlogn),空间O(1)。关键点:三角形性质、排序优化、边界处理。示例:[2,1,2]→5。代码使用Python内置排序和遍历实现。 - 详解
LeetCode|Day9|976. 三角形的最大周长|Python刷题笔记
?️ 本文属于【LeetCode 简单题百日计划】系列
? 点击查看系列总目录 >>
? 题目简介
题号:976. 三角形的最大周长
难度:简单
题目链接:点击跳转
? 题目描述(简要)
给定一个正整数数组 nums
,从中选出三个数,使得它们可以构成一个三角形,并返回其最大周长。如果无法构成任何三角形,返回 0。
示例:
输入:nums = [2,1,2]
输出:5
解释:可以组成三角形,周长是 2 + 2 + 1 = 5
? 解法:排序 + 贪心判断三角形
class Solution
:
def largestPerimeter(self, nums: list[int]) ->
int:
nums.sort(reverse=True)
for i in range(len(nums) - 2):
if nums[i] < nums[i+1] + nums[i+2]:
return nums[i] + nums[i+1] + nums[i+2]
return 0
? 我的理解
- 三角形的性质:任意两边之和 > 第三边;
- 所以我们排序后,从大到小遍历,寻找第一个满足三角形条件的三元组;
- 因为我们从大到小遍历,遇到的第一个合法三角形就是最大周长。
? 基础语法复习:
nums.sort(reverse=True)
:降序排序;range(len(nums) - 2)
:防止越界访问i+1
和i+2
;return
表示函数提前结束并返回值。