leetcode_812 最大三角形面积

178 阅读1分钟

要求

给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。

示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释: 
这五个点如下图所示。组成的橙色三角形是最大的,面积为2

image.png

注意:

  • 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

image.png

解题思路:第一种解法:我们知道三角形的坐标计算公式是S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2),三层循环进行遍历,留下历史最佳的面积就是结果;第二种解法:三角形的面积计算公式S△=1/2 * |(x2-x1)(y3-y1)-(x3-x1)(y2-y1)|,方法同上。