友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
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 -
给出的所有点 互不相同
思路分析
平面上任意三点 \(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)|\]
-
一刷
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;
}

