輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
輸出: 2
解釋:
這五個點以下圖所示。組成的橙色三角形是最大的,面積爲2。spa
在平面直角座標系中,只要三個座標點不在同一直線上就可構成三角形。code
向量(也稱歐幾里得向量、幾何向量、矢量)blog
已知座標點求向量it
設A(x1,y1),B(x2,y2),C(x3,y3)
AB=(x2-x1,y2-y1),AC=(x3-x1,y3-y1), AB、AC表示向量class
因此三個座標點構成三角形的面積爲|(x2-x1)(y3-y1)-(x3-x1)(y2-y1)|/2float
func largestTriangleArea(points [][]int) float64 { area := float64(0) for i := 0; i< len(points)-2; i++ { for j := 1; j < len(points)-1; j++ { for k := 2; k <len(points); k++ { if num := CalculateArea(points[i],points[j],points[k]); num > area { area = num } } } } return area } //計算面積 func CalculateArea(a ,b ,c []int) float64{ AB := []float64{float64(a[1]-b[1]),float64(a[0]-b[0])} AC := []float64{float64(a[1]-c[1]),float64(a[0]-c[0])} Area := math.Abs(AB[1]*AC[0]-AB[0]*AC[1])/2 return Area }
我的感受我用窮舉法列出全部座標的組合的方法不是很好,本身沒有想到更好的方式,若是哪位大佬有更好的方式請指教小弟一下。方法