zoukankan      html  css  js  c++  java
  • 976. 三角形的最大周长

    976. 三角形的最大周长

    给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

    如果不能形成任何面积不为零的三角形,返回 0。

     

    示例 1:

      输入:[2,1,2]
      输出:5
    示例 2:

      输入:[1,2,1]
      输出:0
    示例 3:

      输入:[3,2,3,4]
      输出:10
    示例 4:

      输入:[3,6,2,3]
      输出:8
     

    提示:

    3 <= A.length <= 10000
    1 <= A[i] <= 10^6

     

    方法:排序
    思路

    不失一般性的,我们假设三角形的边长满足a≤b≤c。那么这三条边组成三角形的面积非零的充分必要条件是 a + b > c。

    再假设我们已经知道 c 的长度了,我们没有理由不从数组中选择尽可能大的 a 与 b。因为当且仅当 a + b > c的时候,它们才能组成一个三角形。

    算法

    基于这种想法,一个简单的算法就呼之欲出:排序数组。对于数组内任意的 c,我们选择满足条件的最大的 a≤b≤c,也就是大到小排序,位于 c 后面的两个元素。 从大到小枚举 c,如果能组成三角形的话,我们就返回答案。

     

    代码:

    #include<iostream>
    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n;
        cin>>n;
        int *arr = new int[n+1];
        for (int i = 0; i < n; i++)
        {
            cin>>arr[i];
        }
        sort(arr,arr+n);
        for (int i = n-3; i >= 0; i--)
        {
            // cout<<arr[i]<<" ";
            if (arr[i]+arr[i+1]>arr[i+2])
            {
                cout<<arr[i]+arr[i+1]+arr[i+2]<<endl;
                return 0;
            }
        }
        cout<<0<<endl;
    }

     

    输入:

    4
    3 2 3 4

    输出:

    10

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13488321.html

  • 相关阅读:
    JavaWeb笔记:连接数据库
    Android笔记:ViewGroup
    Java笔记:异常
    Java笔记:文件夹操作
    Java笔记:有啥记啥
    Java笔记:Number
    Java笔记:修饰符
    数据仓库之启用cdc
    多线程之线程池任务管理通用模板
    关于RESTful 的使用(实战)
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13488321.html
Copyright © 2011-2022 走看看