力扣算法學習我的分享812. 最大三角形面積

812. 最大三角形面積

問題描述

  • 給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。
示例

輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
輸出: 2
解釋:
這五個點以下圖所示。組成的橙色三角形是最大的,面積爲2。spa

image-20200305134615400.png

問題分析

在平面直角座標系中,只要三個座標點不在同一直線上就可構成三角形。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

向量求三角形面積公式推導

image-20200305142347134.png

因此三個座標點構成三角形的面積爲|(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
}

總結

我的感受我用窮舉法列出全部座標的組合的方法不是很好,本身沒有想到更好的方式,若是哪位大佬有更好的方式請指教小弟一下。方法

相關文章
相關標籤/搜索