题目链接:https://leetcode-cn.com/problems/largest-perimeter-triangle
题目描述:给定由一些正数(代表长度)组成的数组 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
"""
s = list(A)
a = sorted(s)
l = len(a)
m = a[::-1]
for i in range (l - 2):
if m[i] - m[i + 2] < m[i + 1]:
return m[i] + m[i + 2] + m[i + 1]
return 0
知识点简析:
list(A):将元素A转换成列表类型,
sorted(s):该方法对所有迭代序列都可以使用,因此我们选择该方法进行列表元素排序。注意:对s进行排序,结果从小到大进行展示。其他的排序方法还有ls.sort()等
len(a):计算列表长度,不用赘述了吧。
range函数:range(start, stop[, step])
start:起始位置(默认从0开始):stop:终止位置(取不到终止位置的值):step:步长(默认值为1)
如果我们写range(0, 5)
并进行打印,那么我们会看到0,1,2,3,4,也就是说他代表的区间时[0,5),数学上就是一个左闭右开的区间。