976. 三角形的最大周长

本文介绍了一种算法,用于找出由给定正数组成的最大周长三角形。通过排序和逆向遍历,该算法高效地判断哪些组合可以构成有效的三角形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目原文

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。

示例 1:
输入:[2,1,2]
输出:5

示例 2:
输入:[1,2,1]
输出:0

示例 3:
输入:[3,2,3,4]
输出:10

示例 4:
输入:[3,6,2,3]
输出:8

提示:
3 <= A.length <= 10000
1 <= A[i] <= 10^6

解题思路

对数组A进行排序,组成三角形的条件是两边之和大于第三边,从最长的值开始查找是否满足条件。

class Solution:
    def largestPerimeter(self, A: List[int]) -> int:
        A = sorted(A)
        print(A)
        m = len(A)-1
        while m > 1: 
            s1 = A[m]
            s2 = A[m-1]
            s3 = A[m-2]
            if s2 + s3 > s1:
                return s1 + s2 + s3
            m -= 1
        return 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-perimeter-triangle

### C语言实现计算三角形最大周长 为了简化计算并提高效率,在C语言中可以采用如下方式来计算给定三个边长情况下能够形成的三角形最大可能周长: 当输入一组边长时,先对其进行排序处理,这样能确保最大的两条边尽可能相加大于第三条边,从而满足形成有效三角形条件。如果无法组成任何三角形,则返回0表示不存在这样的组合。 ```c #include <stdio.h> // 函数用于交换两个整数的位置 void swap(int *xp, int *yp) { int temp = *xp; *xp = *yp; *yp = temp; } // 使用冒泡排序算法对数组进行升序排列 void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) for (int j = 0; j < n-i-1; j++) if (arr[j] > arr[j+1]) swap(&arr[j], &arr[j+1]); } // 获取最大周长的函数 int getMaxPerimeter(int edges[]) { bubbleSort(edges, 3); // 判断能否构成三角形 if ((edges[0]+edges[1])>edges[2]){ return edges[0]+edges[1]+edges[2]; } else{ printf("这些边不能构成有效的三角形\n"); return 0; } } int main(){ int edgeLengths[] = {7, 2, 5}; // 用户可自行修改这里的数值测试不同情况 printf("尝试构建具有最大周长的有效三角形...\n"); int maxP=getMaxPerimeter(edgeLengths); if(maxP!=0){ printf("该组数据所能组成的最大周长为:%d\n",maxP); } return 0; } ``` 上述代码通过简单的逻辑实现了对于任意给出的一组长度值(假设总是提供恰好三个),找到它们之间是否存在一种顺序使得这三条线段能围成一个合法的三角形,并输出其对应的最长边界之和;如果没有合适的组合则提示错误消息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值