要求
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
注意:
- 3 <= points.length <= 50.
- 不存在重复的点。
- -50 <= points[i][j] <= 50.
- 结果误差值在 10^-6 以内都认为是正确答案。
核心代码
class Solution:
def largestTriangleArea(self, points: List[List[int]]) -> float:
s,x = 0,0
for i in range(len(points)):
for j in range(i + 1,len(points)):
for k in range(j + 1,len(points)):
x = points[i][0]*points[j][1]+points[j][0]*points[k][1]+points[k][0]*points[i][1]-points[i][0]*points[k][1]-points[j][0]*points[i][1]-points[k][0]*points[j][1]
s = max(s,abs(x) / 2)
return s
另一解法
class Solution:
def largestTriangleArea(self, points: List[List[int]]) -> float:
length=len(points)
s=0
for i in range(length-2):#x1不用遍历到最后一个数字
for j in range(i+1,length-1):
s1=points[j][0]-points[i][0]
s2=points[j][1]-points[i][1]#先求出x2-x1和y2-y1,避免后面重复计算
for k in range(j+1,length):
s4=abs(s1*(points[k][1]-points[i][1])-(points[k][0]-points[i][0])*s2)/2
if s<s4:
s=s4
return s
解题思路:第一种解法:我们知道三角形的坐标计算公式是S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)
,三层循环进行遍历,留下历史最佳的面积就是结果;第二种解法:三角形的面积计算公式S△=1/2 * |(x2-x1)(y3-y1)-(x3-x1)(y2-y1)|
,方法同上。