龙空技术网

打基础之LeetCode算法题第72篇:最大的三角形周长问题

吾是我师 149

前言:

现在大家对“c语言求三角形周长”大概比较注意,各位老铁们都需要分析一些“c语言求三角形周长”的相关资讯。那么小编在网络上网罗了一些对于“c语言求三角形周长””的相关资讯,希望我们能喜欢,姐妹们快快来了解一下吧!

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言,Python和Java作为实现语言,由于篇幅有限,其他语言的实现有兴趣的朋友请自己尝试。

LeetCode 976. 最大的三角形周长(Largest Perimeter Triangle)

问题描述:

给定一个整型数组A, 每一个元素表示一个边的长度,如果任意3个元素可以组成三角形,求三角形的最大周长。如果任意三个元素不能组成一个三角形,则返回0。

注:

3 <= A.length <= 100001 <= A[i] <= 10^6示例:C语言实现:

我们用排序算法来解这道题。

排序可能会修改原数据,我们的原则是不修改原输入数据,所以先copy一份points的副本t,我们对这个副本数据进行排序。

我们调用qsort来做自定义快速排序,排序是依据是点到原点的欧式距离的大小。

欧式距离的计算是,两点间不同维度的差的平方再相加后再开方。由于我们只是比较大小,开不开方并不影响这个大小的比较,因此最后的开方实际上是不需要的。

副本t被排序后,我们只要取前K个元素返回就可以了。

这个思路很简单,实现容易,代码也比较简洁。因为用到快速排序了所以,算法复杂度是O(nlogn)。

其他还有解法可以实现O(n),但是比这个要复杂一些。我还是推荐这个思路。

代码如下:

python语言的实现:

python的实现和C语言的原理是一样的,先自定义排序,然后用切片截取前K个元素返回即可。

代码如下:

Java语言的实现:

Java的实现和C语言的实现相同,但是注意,sort的第二个参数不要直接使用lambda表达式,否则性能至少会降低2倍。

代码如下:

标签: #c语言求三角形周长 #c语言中求三角形周长 #c语言求三角形周长编程