Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
注意:
- 3 <= points.length <= 50.
- 不存在重复的点。
- -50 <= points[i][j] <= 50.
- 结果误差值在 10^-6 以内都认为是正确答案。
二、思路分析:
- 计算边长,输入两点坐标[x1,y1] [x2,y2],输出 Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));
- 海伦公式计算面积,输入三边长 a b c,输出 1/4Math.sqrt((a+b+c)(a+b-c)(a-b+c)(-a+b+c)),注意判断开方里的正负,避免输出NaN;
- 遍历,找出最大面积。
三、AC 代码:
/**
* @param {number[][]} points
* @return {number}
*/
var largestTriangleArea = function(points) {
let n = points.length
let maxArea = 0
for (let i=0; i<n-2; ++i) {
for (let j=i+1; j<n-1; ++j) {
for (let l=j+1; l<n; ++l) {
maxArea = Math.max(maxArea, triangleArea(
sideLength(points[i],points[j]),
sideLength(points[i],points[l]),
sideLength(points[j],points[l])))
}
}
}
return maxArea
// 根据坐标计算边长
function sideLength (arr1, arr2) {
return Math.sqrt(Math.pow(arr1[0]-arr2[0],2) + Math.pow(arr1[1]-arr2[1],2))
}
// 海伦公式
function triangleArea (a, b, c) { // 输入三边长
return 1 / 4 * Math.sqrt((a+b+c)*(a+b-c)*(a-b+c)*(-a+b+c) > 0 ? (a+b+c)*(a+b-c)*(a-b+c)*(-a+b+c) : 0)
}
};
范文参考:
根据三点坐标求三角形面积的鞋带公式!! - 最大三角形面积 - 力扣(LeetCode) (leetcode-cn.com)