友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

812. 最大三角形面积

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

示例 1:

0812 01
输入: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

  • 给出的所有点 互不相同

思路分析

平面上任意三点 \(A(x_1,y_1)\), \(B(x_2,y_2)\), \(P(x_3,y_3)\),构成 \(\triangle APB\)。

\[\overrightarrow{PA} = (x_1-x_3,y_1-y_3), \overrightarrow{PB} = (x_2-x_3,y_2-y_3)\]
\[S_{\triangle APB} = \frac{1}{2}|(x_1-x_3)(y_2-y_3)-(x_2-x_3)(y_1-y_3)|\]
0812 10
  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2026-07-06 22:54:18
 */
public double largestTriangleArea(int[][] points) {
  double result = 0.0D;
  int n = points.length;
  for (int i = 0; i < n; i++) {
    int x1 = points[i][0];
    int y1 = points[i][1];
    for (int j = i + 1; j < n; j++) {
      int x2 = points[j][0];
      int y2 = points[j][1];
      for (int k = j + 1; k < n; k++) {
        int x3 = points[k][0];
        int y3 = points[k][1];
        int num = (x1 - x3) * (y2 - y3) - (x2 - x3) * (y1 - y3);
        result = Math.max(result, Math.abs(num));
      }
    }
  }
  return result / 2.0D;
}