【題目描述】
給定包含多個點的集合咖耘,從其中取三個點組成三角形当辐,返回能組成的最大三角形的面積。
示例:
輸入: 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、結(jié)果誤差值在 10^-6 以內(nèi)都認為是正確答案曹抬。
【思路】
1溉瓶、窮舉所有點,使用另外一種求解三角形面積的定理:海倫公式
2、 海倫公式
3堰酿、sqrt(p*(p-a)(p-b)(p-c))疾宏,其中p=(a+b+c)/2
代碼實現(xiàn):
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)//海倫公式
}