【第12题】给定 r,求以 r 为半径的圆的周长和面积
- 主要知识点
- 习题
- 1. Leetcode 812. 最大三角形面积
- 题目描述
- 初见
- 代码
- 总结
本节主要是数学公式的应用
习题 1. Leetcode 812. 最大三角形面积 题目描述初见给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
提示:3 <= points.length <= 50.
不存在重复的点。
-50 <= points[i][j] <= 50.
结果误差值在 10^-6 以内都认为是正确答案。
看这个数据量…暴力枚举吧。
代码class Solution {
public:
double largestTriangleArea(vector>& points) {
double result(0);
for (int i = 0; i < points.size(); ++i) { // 第一个点
for (int j = i + 1; j < points.size(); ++j) { // 第二个点
for (int k = j + 1; k < points.size(); ++k) { // 第三个点
if ((points[i][0] == points[j][0] && points[j][0] == points[k][0]) ||
(points[i][1] == points[j][1] && points[j][1] == points[k][1]) ) { // 特殊共线
continue;
} else { // 海伦公式计算面积
double line0 = sqrt( (points[j][0] - points[i][0]) * (points[j][0] - points[i][0]) +
(points[j][1] - points[i][1]) * (points[j][1] - points[i][1]) );
double line1 = sqrt( (points[k][0] - points[i][0]) * (points[k][0] - points[i][0]) +
(points[k][1] - points[i][1]) * (points[k][1] - points[i][1]) );
double line2 = sqrt( (points[k][0] - points[j][0]) * (points[k][0] - points[j][0]) +
(points[k][1] - points[j][1]) * (points[k][1] - points[j][1]) );
double p = (line0 + line1 + line2) / 2;
double curS = sqrt(p * (p - line0) * (p - line1) * (p - line2) );
if (curS > result) {
result = curS;
}
}
}
}
}
return result;
}
};
总结
- 本题的难点在于三角形面积计算上。上述代码使用了海伦公式,还有一种用于求多边形面积的鞋带公式



