给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
示例 1 示例2 示例3 示例4
输入:[2,1,2] [1,2,1] [3,2,3,4] [3,6,2,3]
输出:5 0 10 8提示:
3 <= A.length <= 10000
1 <= A[i] <= 10^6来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-perimeter-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
官方题解里yat写了
实际两边之和大于第三边 等价于 两边之差小于第三边,判断一个就行了
l1=[3,2,3,4]
l2=[3,6,2,3]
def triangle_perimeter(list):
list.sort(reverse=True) # 降序排序
for i in range(len(list)-2):
if list[i]<list[i+1]+list[i+2]:
return list[i]+list[i+1]+list[i+2] # list[i]是最大的,后面2个是比它小的,如果这2个的和小于第三边(list[i]),那再往后的不用和当前list[i]比较,都不满足三角形成立的条件,因为是降序,后面的和只会更小
return 0
print(triangle_perimeter(l1))
print(triangle_perimeter(l2))