给定由一些正数(代表长度)组成的数组 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
思路:
形成三角形的条件:两边之和大于第三边
我想的是遍历所有三角形,从列表中取三个数所有中组合全判断并计算
先把列表从大到小排序,再遍历
注意:如果这里我们考虑这种连续的三个组建不了,但是跳跃的三个可以组建。
仔细想想不会存在这样情况的,我们的数据是已经排好序的,如果连续三个不能的话,其它他们两两之间的差值只会更大
Python代码实现如下:
class Solution(object):
def largestPerimeter(self, A):
"""
:type A: List[int]
:rtype: int
"""
res = 0
A.sort(reverse=True)
for i in range(len(A)-2):
if A[i]+A[i+1]>A[i+2]:
l = A[i]+A[i+1]+A[i+2]
res = max(res,l)
return res