leetcode NO.976三角形的最大周长 (python 3)
给定由一些正数(代表长度)组成的数组 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
解题思路: 三条线段可以形成三角形的条件是:三条边任意两条边之和大于第三条边。 再回来看此题,求最大边,那么我们是不是可以将list先按照大小排序,然后依次从大到小取值。
上代码:
class Solution:
def largestPerimeter(self, A):
"""
:type A: List[int]
:rtype: int
"""
a = sorted(A,reverse = True)
for i in range(len(a)-2):
if a[i+1]+a[i+2]>a[i]:
return a[i]+a[i+1]+a[i+2]
return 0
首先我们先按照大小排序,然后依次遍历,判断条件的时候应该是:
a[i+1]+a[i+2]>a[i] and a[i]+a[i+2]>a[i+1] and a[i]+a[i+1]>a[i+2]
但是我们的list已经按照大小排序了,也就是后面的a[i]+a[i+2]>a[i+1] and a[i]+a[i+1]>a[i+2]
肯定是成立的,所以我们只用判断a[i+1]+a[i+2]>a[i]
即可,如果if不成立,那么就肯定是a[i+1]+a[i+2]>a[i]不成立,这时我们会将一个更小的数字拿进来,但是谁用来更换呢?显然是最大的,如果不是最大的那个,a[i+1]+a[i+2]>a[i]
依旧不成立。所以,,,,,,,