上一篇 LeetCode 面试题中,我们分析了一道字符串的算法题 - 反转字符串中的元音字母,今天我们来分析一道简单的几何题吧。
今天要给大家分析的面试题是 LeetCode 上第 976 号问题,
LeetCode - 976. 三角形的最大周长
https://leetcode-cn.com/classic/problems/largest-perimeter-triangle/
题目描述
给定由一些正数(代表长度)组成的数组 A
,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0
。
示例 1:
1
2
输入:[2,1,2]
输出:5
示例 2:
1
2
输入:[1,2,1]
输出:0
示例 3:
1
2
输入:[3,2,3,4]
输出:10
示例 4:
1
2
输入:[3,6,2,3]
输出:8
提示:
3 <= A.length <= 10000
1 <= A[i] <= 10^6
-
题目难度:简单
-
通过次数:8.8K
-
提交次数:16.1K
-
贡献者:LeetCode
-
相关标签
- 排序
-
相似题目
- 最大三角形面积
https://leetcode-cn.com/problems/largest-triangle-area 难度: 简单
解题思路:
我们知道,平面中构成三角形的充分必要条件是 3条边中任意两边之和大于第三边(3次比较),也即 较短的两边之和大于最长边即可(有序情形下只需1次比较)。而要求三角形的最大边长,也就是使得三边之长最大,当然是取最长的3个边长了。于是求解此题的具体步骤如下:
- 将数组 A 中的各边长度按从大到小排序
- 遍历排过序的数组中的数,取出相邻的 3 个边长,当第一次满足较短的两边之和大于最长边时,则对这3边求和返回即可。
临界情形: 输入的边数不到3个,直接 return 0
.
已 AC 代码:
1
2
3
4
5
6
7
8
9
10
class Solution:
def largestPerimeter(self, A: List[int]) -> int:
if (len(A) < 3):
return 0
A.sort(reverse=True)
for i in range(len(A)-2):
if A[i] < A[i+1] + A[i+2]: # Can build a triangle
return A[i] + A[i+1] + A[i+2]
return 0
运行结果:
执行用时: 256 ms
, 在所有 python3 提交中击败了 ` 91.91 %` 的用户.
示例代码: https://github.com/JustDoPython/leetcode-python/tree/master/leetcode-976 .
文档信息
- 本文作者:Bravo Yeung大白技术控
- 本文链接:https://web.geekplayers.com/leetcode976-largest-perimeter-triangle.html
- 版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请留言。)