812. 最大三角形面积 : 简单模拟题

1,338 阅读2分钟

题目描述

这是 LeetCode 上的 812. 最大三角形面积 ,难度为 「简单」

Tag : 「模拟」

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

示例:

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

输出: 2

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

注意:

  • 3 <= points.length <= 50.
  • 不存在重复的点。
  • -50 <= points[i][j] <= 50
  • 结果误差值在 10^{-6} 以内都认为是正确答案。

模拟

根据题意模拟即可:枚举三角形三个顶点并计算面积。

代码:

class Solution {
    public double largestTriangleArea(int[][] ps) {
        int n = ps.length;
        double ans = 0;
        for (int i = 0i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int k = j + 1; k < n; k++) {
                    int cur = cross(ps[j][0] - ps[i][0], ps[j][1] - ps[i][1], ps[k][0] - ps[i][0], ps[k][1] - ps[i][1]);
                    ans = Math.max(ans, Math.abs(cur / 2.0)); 
                }
            }
        }
        return ans;
    }
    int cross(int a, int b, int c, int d) {
        return a * d - c * b;
    }
}
  • 时间复杂度:O(n^3)
  • 空间复杂度:O(1)

最后

这是我们「刷穿 LeetCode」系列文章的第 No.812 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。