LeetCode 976 三角形的最大周长

题目描述:给定由一些整数(代表长度)组成的数组A,返回由其中三个长度组成的,面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0.

示例1:

      输入: [3, 2, 3, 4]

      输出: 10

提示:

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

思路

  • 对所有边进行排序
  • 从最长的三条边开始招,这三条边之和是当前最大的
  • 如果满足条件(前两条边之和大于第三边),此三条边之和就是最长的周长了
  • 如果不满足的话,那么任意两条边相加也不可能大于最大的这条边了,舍弃最大的边,从步骤二开始重复。

代码

Python

class Solution:
    def largestPerimeter(self, A):
        if len(A) < 3:
            return 0
        A.sort()  # 排序,从小到大
        for i in range(len(A)-1, 1, -1):
            if A[i] < A[i-1] + A[i-2]:
                return A[i] + A[i-1] + A[i-2]
        return 0

Java

class 三角形的最大周长 {
    public static void main(String[] args) {
        int[] A = {2, 1, 2};
        System.out.println(largestPerimeter(A));
        for (int each : A){
            System.out.print(each + " ");
        }
    }
    public static int largestPerimeter(int[] A) {
        Arrays.sort(A);
        for (int i = A.length - 1; i >= 2; i--){
            if (A[i] < A[i-1] + A[i-2]){
                return A[i] + A[i-1] + A[i-2];
            }
        }
        return 0;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值