812. 最大三角形面积

题目

给你一个由 X-Y 平面上的点组成的数组 points ,其中 points[i] = [xi, yi] 。从其中取任意三个不同的点组成三角形,返回能组成的最大三角形的面积。与真实值误差在 10-5 内的答案将会视为正确答案**。**

示例 1:

输入:points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出:2.00000 解释:输入中的 5 个点如上图所示,红色的三角形面积最大。

示例 2:

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

提示:

  • 3 <= points.length <= 50
  • -50 <= xi, yi <= 50
  • 给出的所有点 互不相同

解题思路

求三角形面积有几种非常有效的方法。其中最直接、最适合编程计算的是 “鞋带公式”(Shoelace Formula)。面积的计算公式是: $$\mathrm{Area}=\frac{1}{2}|(x_1(y_2-y_3)+x_2(y_3-y_1)+x_3(y_1-y_2))|$$

具体代码

class Solution {
public:
    double largestTriangleArea(vector<vector<int>>& points) {

        int n = points.size();
        double Area = 0.0;
        for(int i = 0; i < n - 2; ++i)
        {
            for(int j = i + 1; j < n - 1; ++j)
            {
                for(int k = j + 1; k < n; ++k)
                {
                    int x1 = points[i][0];
                    int y1 = points[i][1];
                    int x2 = points[j][0];
                    int y2 = points[j][1];
                    int x3 = points[k][0];
                    int y3 = points[k][1];
                    double sum1 = x1 * y2 + x2 * y3 + x3 * y1;
                    double sum2 = y1 * x2 + y2 * x3 + y3 * x1;
                    Area = max(Area, 0.5 * abs(sum1 - sum2));
                }
            }
        }
        
        return Area;
        
    }
};