LeetCode976:三角形的最大周长

本文探讨了如何从一组正数中找到能构成三角形的最大周长,利用三角形的性质,通过排序和逆向遍历算法,有效地解决了这一问题。

摘要生成于 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

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

解析:

   该题目是求数组中能组成三角形的最大周长,主要用到三角形两边之和大于第三边的性质。由于数组中数值没有规律性,不容易计算,所以首先对数组进行排序,然后从中找出符合条件的最大数组。我自己写的方法比较繁琐,是从头到尾遍历数组,计算可行性,leetcode中较为简单的做法是从后往前遍历数组,很容易计算。

代码:

int largestPerimeter(vector<int>& A) 
{
	sort(A.begin(), A.end());
	int size = A.size();
	int left = 0, mid = 1, right = 2;
	int maxLength = 0;
	while (right < size)
	{
		if (A[left] + A[mid] > A[right])
		{
			maxLength =max(maxLength, A[left] + A[mid] + A[right]);
			if (left < mid - 1)
			{
				left++;
			}
			else if (mid < right - 1)
			{
				mid++;
			}
			else
			{
				right++;
			}
		}
		else
		{
			if (left < mid - 1)
			{
				left++;
			}
			else if (mid < right - 1)
			{
				mid++;
			}
			else
			{
				left++;
				right++;
				mid++;
			}
		}
	}
	return maxLength;
}

leetcode中代码:

int largestPerimeter(vector<int>& A) 
{
        int data = 0;
	    sort(A.begin(),A.end());
	    for (int i = A.size() - 3; i >= 0; --i) {
		    if (A[i] + A[i + 1]>A[i + 2]) {
			    data = A[i+1] + A[i] + A[i + 2];
			    break;
		    }
	    }
	return data;
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值