三角形的最大周长
Largest Perimeter Triangle
解
方法一: 从大到小排序,对于第三边c
进行枚举,若c
后两个数字满足三角形,就返回周长
int comp(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}
int largestPerimeter(int* A, int ASize)
{
int i;
qsort(A, ASize, sizeof(A[0]), comp);
for (i = 0; i < ASize - 2; i++){
if (A[i] < A[i + 1] + A[i + 2]){
return A[i] + A[i + 1] + A[i + 2];
}
}
return 0;
}
结果
方法二: 对于方法一,需要全局搜索,所需要的时间较长,而有时候不需要全部排序就可以找到满足条件的值。
因此可以利用冒泡排序,每轮循环都会选出最大值放到后面,因此,循环三次后,我们就可以进行比较。
int largestPerimeter(int* A, int ASize)
{
int i, j, temp;
int n = ASize - 1;
for (i = 0; i < n; i++){
for (j = 0; j < n - i; j++){
if (A[j] > A[j + 1]){
temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
}
}
if (i >= 2){
if (A[n - i] + A[n - i + 1] > A[n - i + 2]){
return A[n - i] + A[n - i + 1] + A[n - i + 2];
}
}
}
if (A[0] + A[1] > A[2]){ /*ASize = 3 的情况*/
return A[0] + A[1] + A[2];
}
return 0;
}
结果