原文链接: https://leetcode-cn.com/problems/largest-perimeter-triangle
英文原文
Given an integer array nums
, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return 0
.
Example 1:
Input: nums = [2,1,2] Output: 5
Example 2:
Input: nums = [1,2,1] Output: 0
Example 3:
Input: nums = [3,2,3,4] Output: 10
Example 4:
Input: nums = [3,6,2,3] Output: 8
Constraints:
3 <= nums.length <= 104
1 <= nums[i] <= 106
中文题目
给定由一些正数(代表长度)组成的数组 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
通过代码
高赞题解
其实这个感觉最好冒泡的写法, 因为我们没必要全部把数组排序完, 再 去比较 两边之和大于第三边
冒泡排序, 每排一轮, 就会选出个最大值放在后边, 当排三轮后, 我们就可以比较了,
如果现在出现了符合三角情况的, 就直接返回, 不在排序了,
如果还没出现, 就再来一轮, 再选出个,
var largestPerimeter = function(A) {
let arr = A;
if (arr.length < 3) {
return 0;
}
let tempExchangVal;
let n = arr.length;
let maxIndex = arr.length - 1;
for (let i = 0; i < maxIndex; i++) {
for (let j = 0; j < maxIndex - i; j++) {
if (arr[j] > arr[j + 1]) {
tempExchangVal = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tempExchangVal;
}
}
if ( i >= 2) {
if(arr[maxIndex - i] + arr[maxIndex - i + 1] > arr[maxIndex - i + 2]) {
return arr[maxIndex - i] + arr[maxIndex - i + 1] + arr[maxIndex - i + 2]
}
}
}
if (arr[0] + arr[1] > arr[2]) {
return arr[0] + arr[1] + arr[2];
}
return 0;
};
![22.png](../images/largest-perimeter-triangle-0.png)
## 统计信息
| 通过次数 | 提交次数 | AC比率 |
| :------: | :------: | :------: |
| 54941 | 91931 | 59.8% |
## 提交历史
| 提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
| :------: | :------: | :------: | :--------: | :--------: |
## 相似题目
| 题目 | 难度 |
| :----------------------------------------------------------: | :---------: |
| [最大三角形面积](https://leetcode-cn.com/problems/largest-triangle-area/) | 简单|