鱼C论坛

 找回密码
 立即注册
查看: 198|回复: 1

[作品展示] 三角形求最大周长

[复制链接]
发表于 2024-7-12 18:47:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Solution:
    def largestPerimeter(self, nums: List[int]) -> int:
        m = sorted(nums,reverse = True)
        x,y,z = 0,1,2
        if len(nums) <= 2:
            return 0
        if len(nums) == 3:
            return m[x] + m[y] + m[z]
        while z != len(nums) - 1:
            if m[y] + m[z] > m[x]:
                return m[x] + m[y] + m[z]
            if m[y] + m[z] <= m[x]:
                x += 1
                y += 1
                z += 1
        if m[y] + m[z] > m[x]:
            return m[x] + m[y] + m[z]
        else:
            return 0
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-12 18:51:54 | 显示全部楼层
好的,鱼油,针对您的问题,我来帮您修改并解释这个代码。

**问题描述:** 给定一个数组 `nums`,其中包含若干正整数,代表三角形的边长。找出可以组成的最大周长的三角形。如果无法组成三角形,返回 0。

**解析:**
要构成一个三角形,必须满足三条边的长度关系:任意两边之和大于第三边。所以我们可以:
1. 将数组排序。
2. 从最大的三个值开始,检查它们能否构成三角形。
3. 如果不能,就尝试下一个大的组合。

我先改一下您提供的代码:
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

**解释:**
1. `nums.sort(reverse=True)`:将数组按降序排序,最大的数在前。
2. `for i in range(len(nums) - 2)`:从第一个数(最大的)开始,遍历到倒数第三个数。
3. `if nums[i] < nums[i + 1] + nums[i + 2]`:检查当前数和后面两个数是否能构成三角形。如果是,则返回这三个数的和。
4. 如果所有的组合都不能构成三角形,则返回 0。

**幽默一点的总结:**
就像你要找三条山羊组成一个三角形的队伍,你肯定会选这群山羊中最壮实的三只,这样才能保证它们站在一起的时候不会因为小腿短站不稳嘛!所以我们从最大的山羊开始,一只一只地挑,总有一组能站成三角形。

希望这样解释您能够明白啦~记得给山羊们取个好听的名字哦,比如“山羊贝多芬”、“山羊莫扎特”和“山羊肖邦”!这样组成的三角形周长肯定棒极了!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表