题目描述

原题链接

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

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

示例 1:

  1. 输入:[2,1,2]
  2. 输出:5

示例 2:

  1. 输入:[1,2,1]
  2. 输出:0

示例 3:

  1. 输入:[3,2,3,4]
  2. 输出:10

示例 4:

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

提示:

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

个人解法

Java

JavaScript

  1. /**
  2. * @param {number[]} A
  3. * @return {number}
  4. */
  5. var largestPerimeter = function(A) {
  6. A.sort(function(a, b) {
  7. return b - a;
  8. });
  9. var i = 0;
  10. var len = A.length;
  11. for(var i = 0 ; i < len - 2;i++){
  12. if(A[i] < A[i+1] + A[i + 2]){
  13. return A[i] + A[i+1] + A[i + 2];
  14. }
  15. }
  16. return 0;
  17. };

更优解法

Java

Javascript

原文链接

  1. var largestPerimeter = function(A) {
  2. A.sort((a, b) => a - b);
  3. for (let i = A.length - 1; i >= 2; --i) {
  4. if (A[i - 2] + A[i - 1] > A[i]) {
  5. return A[i - 2] + A[i - 1] + A[i];
  6. }
  7. }
  8. return 0;
  9. };