从数组中选出三条边,组成周长最大三角形

挑战程序设计竞赛(第2版)1.6.1题
O(nlogn)的算法

int n, a[MAX_N];

void solve(){
    int ans = 0;
    sort(a,a+n-1);
    for(int i=n-3;i>=0;i--){ 
        if(a[i]+a[i+1]>a[i+2]){
            ans = a[i]+a[i+1]+a[i+2];
            break;
        }
    }
    cout<<ans;
}

1、对所有边排序
2、从最长的三条边开始找,这三条边之和是当前最大的。
3、如果满足条件(前两条边之和大于第三边),那就是答案了。
4、如果不满足,那么任意两条边相加也不可能大于最大的这条边,舍弃最大的边,从步骤2开始重复。

    原文作者:DamianGao
    原文地址: https://blog.csdn.net/ghr19961014/article/details/79937053
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞