输入: 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 }
我的感受我用穷举法列出全部坐标的组合的方法不是很好,本身没有想到更好的方式,若是哪位大佬有更好的方式请指教小弟一下。方法