LeetCode蹂躏集

2018-05-04 LeetCode812. Largest

2018-05-04  本文已影响0人  alexsssu

题意:给你一堆点,选出三个点来组成三角形面积最大,输出最大三角形的面积。
解题思路:开始想着用图论的方法找到这三个点,无奈陷入江局,看了数据规模共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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读