给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:[2,1,2]
输出:5
示例 2:
输入:[1,2,1]
输出:0
示例 3:
输入:[3,2,3,4]
输出:10
示例 4:
输入:[3,6,2,3]
输出:8
思路:
先排序,然后看最后三个是否满足 a+b>c(a<b<c,因为排了序只要满足这个就行)
然后发现有的数据太多,会超时,那我们只要改一下,当排出三个后就开始检查租后三个是否满足就行。
代码:
int largestPerimeter(int* A, int ASize){
int i,j,t,max,a=ASize;
for(i=0;i<ASize;i++)
{
max=0;
for(j=0;j<ASize-i;j++)
{
if(A[max]<A[j]){
max=j;
}
}
t=A[j-1];
A[j-1]=A[max];
A[max]=t;
if(i>=2&&a>2) {a--;
if(A[a-1]-A[a]+A[a-2]>0) return A[a-1]+A[a-2]+A[a];}
}
return 0;
}