LeetCode 812. 最大三角形面积 Largest Tr
2019-08-19 本文已影响0人
1江春水
【题目描述】
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
image.png
【注意】
1、3 <= points.length <= 50.
2、不存在重复的点。
3、-50 <= points[i][j] <= 50.
4、结果误差值在 10^-6 以内都认为是正确答案。
【思路】
1、穷举所有点,使用另外一种求解三角形面积的定理:海伦公式
2、 海伦公式
3、sqrt(p*(p-a)(p-b)(p-c)),其中p=(a+b+c)/2
代码实现:
func largestTriangleArea(_ points: [[Int]]) -> Double {
var res = Double()
for i in 0..<points.count-2 {
for j in i+1..<points.count-1 {
for k in j+1..<points.count {
let tmp = area(points[i], points[j], points[k])
res = max(res, tmp)
}
}
}
return res
}
func area(_ x:[Int],_ y:[Int],_ z:[Int]) -> Double {
var a : Double = 0.0,b = 0.0,c = 0.0,p = 0.0
let xa = (x[0]-y[0])*(x[0]-y[0])
let ya = (x[1]-y[1])*(x[1]-y[1])
a = sqrt(Double(xa + ya))
let xb = (x[0]-z[0])*(x[0]-z[0])
let yb = (x[1]-z[1])*(x[1]-z[1])
b = sqrt(Double(xb + yb))
let xc = (y[0]-z[0])*(y[0]-z[0])
let yc = (y[1]-z[1])*(y[1]-z[1])
c = sqrt(Double(xc+yc))
p = (a+b+c)/2
let res = p*(p-a)*(p-b)*(p-c)
return sqrt(res)//海伦公式
}