1.61 三角形O(nlogn)做法


书里给出比较无脑的做法,三个for循环复杂度是n的立方。如果先把数列排序,依次判断连续三个数是否能形成三角形,可以把时间复杂度控制在nlogn。
#include<stdio.h>
#include<algorithm>

using namespace std;

int main()
{
    int n,a[10],i,ans=0;
    scanf("%d",&n);
    for(i=0;i<n;++i)
    {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);//由小到大
    for(i=n-1;i>1;i--)
    {
        if(a[i]<(a[i-1]+a[i-2]))//可以组成三角形
        {
            ans=a[i]+a[i-1]+a[i-2];
            printf("%d",ans);
            return 0;
        }
    }
    printf("%d",ans);
    return 0;
}

posted @ 2016-05-24 08:01  闲鱼型选手  阅读(256)  评论(0编辑  收藏  举报