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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ghr19961014/article/details/79937053

挑战程序设计竞赛(第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开始重复。

展开阅读全文

没有更多推荐了,返回首页