美文网首页LeetCode蹂躏集
2018-05-04 LeetCode812. Largest

2018-05-04 LeetCode812. Largest

作者: alexsssu | 来源:发表于2018-05-04 10:35 被阅读0次

    题意:给你一堆点,选出三个点来组成三角形面积最大,输出最大三角形的面积。
    解题思路:开始想着用图论的方法找到这三个点,无奈陷入江局,看了数据规模共50个点,使用暴力算法的时间复杂度是O(n3),可以接受。
    已知三个点坐标求三角形面积公式有两种较为简单的方法,一种是海伦公式,s=sqrt(p(p-a)(p-b)(p-c)),其中p=(1/2)(a+b+c),其中a、b、c分别是三个边的长度。通过点计算边,然后计算面积。

    第二种方法是shoelace formula, image.png
    image.png

    所以三角形的面积S= (1/2) * abs
    |x1 y1 1|
    |x2 y2 1|
    |x3 y3 1|

    class Solution {
    public:
        double largestTriangleArea(vector<vector<int>>& points) {
            double s, ans = 0;
            for(int i = 0; i < points.size() - 2; i++)
            {
                for(int j = i + 1; j < points.size()-1; j++)
                {
                    for(int k = j + 1; k < points.size(); k++)
                    {
                        s = (1.0/2) * abs(points[i][0]*points[j][1] + points[j][0]*points[k][1]
                                          + points[i][1]*points[k][0] - points[k][0]*points[j][1] 
                                          - points[j][0]*points[i][1]-points[i][0]*points[k][1]);
                        ans = ans > s ? ans : s;
                    }
                }
            }
            return ans;
        }
    };
    

    相关文章

      网友评论

        本文标题:2018-05-04 LeetCode812. Largest

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