1. 程式人生 > >LeetCode 812題 最大三角形面積 -- JavaScript

LeetCode 812題 最大三角形面積 -- JavaScript

已經有很久沒做了,尷尬~~~

題目描述:

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

示例 : 

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

注意:

  • 3 <= points.length <= 50.
  • 不存在重複的點。
  •  -50 <= points[i][j] <= 50.
  • 結果誤差值在 \small {\color{Magenta} 10^{-6}} 以內都認為是正確答案。

方法分析:

該題的關鍵是要知道如何根據三個座標值來計算三角形的面積。假設我們知道有三個座標點\small {\color{Magenta} (x_{1},y_{1})}

\small {\color{Magenta} (x_{2},y_{2})}\small {\color{Magenta} (x_{3},y_{3})}如下圖所示:

則三角形ABC的面積為:

\small S_{ABC}=\frac{1}{2}[x_{1}(y_{2}-y_{3}) + x_{2}(y_{3}-y_{1}) + x_{3}(y_{1}-y_{2})]

知道了這一點之後,其它的就好辦了,直接遍歷陣列,取出三對座標,利用上述公式計算即可,最後取出結果的最大值。

程式碼實現:

var largestTriangleArea = function(points) {
  let max = 0;
  points.map(i => points.map(j => points.map(k => {
    max = Math.max(max,i[0]*(j[1] - k[1]) + j[0]*(k[1] - i[1]) + k[0]*(i[1] - j[1]));
  })));
  return max / 2;
};

當然,為了遍歷的次數更少,即執行時間更短,可以進行如下改寫:

var largestTriangleArea = function(points) {
  let len = points.length
  let max = 0;
  for (let i = 0; i < len - 2; i++) {
    for (let j = i + 1; j < len - 1; j++) {
      for (let k = j + 1; k < len; k++) {
        max = Math.max(max, Math.abs(points[i][0] * (points[j][1] - points[k][1]) + points[j][0] * (points[k][1] - points[i][1]) + points[k][0] * (points[i][1] - points[j][1])))
      }
    }
  }
  return max / 2;
};

程式碼解析:

該演算法的核心就是進行三角形面積的計算,通過三次遍歷獲得所有的座標組合,時間複雜度為\small O(n^{3})

相關推薦

LeetCode 812 三角形面積 -- JavaScript

已經有很久沒做了,尷尬~~~ 題目描述: 給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。 示例 :  輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 輸出: 2 解釋: 這五個點如下圖所示。組

LeetCode812. 三角形面積

1.題目 給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。 示例: 輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 輸出: 2 解釋: 這五個點如下圖所示。組成的橙色三角形是最大的,面積為2。

812. 三角形面積

給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。 示例: 輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 輸出: 2 解釋: 這

hdu2202:三角形(凸包旋轉卡殼求三角形面積

Problem Description 老師在計算幾何這門課上給Eddy佈置了一道題目,題目是這樣的:給定二維的平面上n個不同的點,要求在這些點裡尋找三個點,使他們構成的三角形擁有的面積最大。 Eddy對這道題目百思不得其解,想不通用什麼方法來解決,

Codeforces Round #358 (Div. 2) E 計算幾何 旋轉卡殼求三角形面積

連結:戳這裡 E. Alyona and Triangles time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard ou

leetcode_812_ 三角形面積

給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。 示例: 輸入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 輸出: 2 解釋: 這五個點如下圖所示。組成的橙色三角形是最大的,面積為2 注意: 3 &

158、三角形面積

題目描述 直接弄出根據三點來求一個三角形的面積公式即可 注意的是需要求模,然後用for迴圈進行遍歷 int tem = Math.abs(x2y3 + x1y2 + x3y1 - x3y2 - x2y1 - x1y3); class Solution { public dou

農田開發 NOJ (已知N個點選取3個求三角形面積問題)

E - 農田開發時間限制(普通/Java) : 1000 MS/ 3000 MS 執行記憶體限制 : 65536 KByte總提交 : 83 測試通過 : 43 比賽描述有一塊農田,田地裡安放上N個小

Triangle (旋轉卡殼求三角形面積

Given n distinct points on a plane, your task is to find the triangle that have the maximum area, whose vertices are from the given points

Leetcode形狀面積的三

給定一個n長非負整數陣列,每個元素值代表一個bar高度,求這些bar圍成的最大矩形面積。 思路如下: 先假定陣列是長為n的有序陣列num,則這些bar高度從左到右依次增加,例如1,2,5,7,8,此時圍成矩形面積將最大值: maxarea=max(num[0]*(n),n

(hdu step 7.1.6)三角形(凸包的應用——在n個點中找到3個點,它們所形成的三角形面積)

三角形 struct names com 都在 acm sni 都是 tran 題目:最大三角形Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S

LeetCode】164. 間距 結報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximum-gap/description/ 題目描述: 給定一個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。 如果陣列元素個數小於 2,則返回 0。 示例 1: 輸入: [3,6,9,1

LeetCode】85. 矩形 結報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximal-rectangle/description/ 題目描述: 給定一個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。 示例: 輸入: [   ["1"

LeetCode——918. 環形子陣列的和(JavaScript)

給定一個由整數陣列 A 表示的環形陣列 C,求 C 的非空子陣列的最大可能和。 在此處,環形陣列意味著陣列的末端將會與開頭相連呈環狀。(形式上,當0 <= i < A.length 時 C[i] = A[i],而當 i >= 0 時 C[i+A.length] = C[

hdu step 7 1 6 三角形 凸包的應用——在n個點中找到3個點 它們所形成的三角形面積

                題目:最大三角形Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 121 Accepted Submission(s): 61

Leetcode 84 柱狀圖中面積

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。 以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。 圖中陰影部分為所能勾勒出的

Leetcode 84. Largest Rectangle in Histogram 柱狀圖的矩形面積

解決思路:        問題主要考察每一根柱子最大能擴多大,這個行為的實質就是找到柱子左邊剛比它小的柱子的位置在哪裡,以及右邊剛比它小的柱子位置在哪裡,為了模擬這個過程,我們可以用棧模擬這個過程。        棧裡邊儲存的是一個遞增柱子的位置,每次遇到一個比棧頂位

矩形面積(單調棧解法,我在此探索到了許多)

目錄 》題目《 》思路《 》程式碼《 》題目《 在X軸上水平放置著 N 個條形圖,這 N 個條形圖就組成了一個柱狀圖,每個條形圖都是一個矩形,每個矩形都有相同的寬度,均為1單位長度,但是它們的高度並不相同。例如下圖,圖1包含的矩形的高分別為2,1,4,5,1,3,3 單位長度

[Leetcode] 第318 單詞長度乘積

  一、題目描述 給定一個字串陣列 words,找到 length(word[i]) * length(word[j]) 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。 示例 1: 輸入:

Leetcode刷題記—— 84. Largest Rectangle in Histogram(柱形圖中矩形面積)

一、題目敘述: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of large