美文网首页算法提高之LeetCode刷题算法
812. 最大面积三角形(Python)

812. 最大面积三角形(Python)

作者: 玖月晴 | 来源:发表于2019-05-28 11:40 被阅读0次

    题目

    难度:★★☆☆☆
    类型:几何

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

    示例

    输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
    输出: 2

    解释:
    这五个点如下图所示。组成的橙色三角形是最大的,面积为2。


    三角形的最大面积

    解答

    已知三角形的三个顶点,求三角形的面积:

    证明:

    假设一个三角形有三个顶点P1(x1, y1), P2(x2, y2), P3(x3, y3),底边为P2P3,则底边长

    \left | P_{2}P_{3} \right |=\sqrt{\left (x_{3}-x_{2} \right )^2+ \left(y_{3}-y_{2} \right )^2}

    底边所在的直线方程是:

    y-y_{3}=\frac{y_{3}-y_{2}}{x_{3}-x_{2}}\left ( x-x_{3} \right )

    化简为:

    \left ( y_{3}-y_{2} \right )x-\left ( x_{3}-x_{2} \right )y+y_{2}x_{3}-x_{2}y_{3}=0

    过P1作底边P2P3的高,根据点到直线的距离公式:

    dist\left ( \left ( x_{0},y_{0} \right ), Ax+By+C=0 \right )=\frac{\left | Ax_{0}+By_{0}+C \right |}{\sqrt{A^{2}+B^{2}}}

    可得高为点P1到直线P2P3的距离:

    \left | P_{1}H \right |=\frac{x_{1}y_{3}-x_{3}y_{1}+x_{2}y_{1}-x_{1}y_{2}+x_{3}y_{2}-x_{2}y_{3}}{\sqrt{\left ( y_{3}-y_{2} \right )^{2}+\left ( x_{3}-x_{2} \right )^{2}}}

    因此三角形的面积为:

    S=\frac{1}{2}\left | P_{1}H \right |\left | P_{2}P_{3} \right |=\frac{1}{2}\left | x_{1}y_{3}-x_{3}y_{1}+x_{2}y_{1}-x_{1}y_{2}+x_{3}y_{2}-x_{2}y_{3} \right |

    我们使用暴力法遍历所有可能的三点组合。

    class Solution:
        def largestTriangleArea(self, points):
            from itertools import combinations
            amax = 0
            for c in combinations(points, 3):
                x1, x2, x3, y1, y2, y3 = c[0][0], c[1][0], c[2][0], c[0][1], c[1][1], c[2][1]
                s = abs(x1*y3-x3*y1+x2*y1-x1*y2+x3*y2-x2*y3)/2
                amax = max(s, amax)
            return amax
    

    如有疑问或建议,欢迎评论区留言~

    相关文章

      网友评论

        本文标题:812. 最大面积三角形(Python)

        本文链接:https://www.haomeiwen.com/subject/hsmrtctx.html