Leetcode 587 安裝柵欄

2021-09-24 14:50:05 字數 2844 閱讀 1797

在乙個二維的花園中,有一些用 (x, y) 座標表示的樹。由於安裝費用十分昂貴,你的任務是先用最短的繩子圍起所有的樹。只有當所有的樹都被繩子包圍時,花園才能圍好柵欄。你需要找到正好位於柵欄邊界上的樹的座標。

示例 1:

輸入:[[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]]

輸出:[[1,1],[2,0],[4,2],[3,3],[2,4]]

解釋:

示例 2:

輸入:[[1,2],[2,2],[4,2]]

輸出:[[1,2],[2,2],[4,2]]

解釋:

即使樹都在一條直線上,你也需要先用繩子包圍它們。

注意:

所有的樹應當被圍在一起。你不能剪斷繩子來包圍樹或者把樹分成一組以上。

輸入的整數在 0 到 100 之間。

花園至少有一棵樹。

所有樹的座標都是不同的。

輸入的點沒有順序。輸出順序也沒有要求。

我給了它乙個新名字,邊界掃瞄法。用到的性質和解法二密切相關,首先也需要對某個維度進行從小達到排序。這樣我們就能確定其中乙個頂點了,我們選擇橫座標最小的那個點作為整個座標的原點。

演算法步驟:

1. 把所有點放在二維座標系中,則縱座標最小的點一定是凸包上的點,如圖中的p0。

2. 把所有點的座標平移一下,使 p0 作為原點,如上圖。

3. 計算各個點相對於 p0 的幅角 α ,按從小到大的順序對各個點排序。當 α 相同時,距離 p0 比較近的排在前面。例如上圖得到的結果為 p1,p2,p3,p4,p5,p6,p7,p8。我們由幾何知識可以知道,結果中第乙個點 p1 和最後乙個點 p8 一定是凸包上的點。

(以上是準備步驟,以下開始求凸包)

以上,我們已經知道了凸包上的第乙個點 p0 和第二個點 p1,我們把它們放在棧裡面。現在從步驟3求得的那個結果裡,把 p1 後面的那個點拿出來做當前點,即 p2 。接下來開始找第三個點:

4. 連線p0和棧頂的那個點,得到直線 l 。看當前點是在直線 l 的右邊還是左邊。如果在直線的右邊就執行步驟5;如果在直線上,或者在直線的左邊就執行步驟6。

5. 如果在右邊,則棧頂的那個元素不是凸包上的點,把棧頂元素出棧。執行步驟4。

6. 當前點是凸包上的點,把它壓入棧,執行步驟7。

7. 檢查當前的點 p2 是不是步驟3那個結果的最後乙個元素。是最後乙個元素的話就結束。如果不是的話就把 p2 後面那個點做當前點,返回步驟4。

1

public

class

solution

5public

intdistance(point p, point q)

8private

static

point bottomleft(point points)

15public list outertrees(point points)

27});

28int i = points.length - 1;

29while (i >= 0 && orientation(bm, points[points.length - 1], points[i]) == 0)

30 i--;

31for (int l = i + 1, h = points.length - 1; l < h; l++, h--)

36 stack < point > stack = new stack< >();

37 stack.push(points[0]);

38 stack.push(points[1]);

39for (int j = 2; j < points.length; j++)

46return

new arraylist<>(stack);47}

48 }

Leetcode 58 之反向迭代器的使用

題目 given a string s consists of upper lower case alphabets and empty space characters return the length of last word in the string.if the last word do...

LeetCode 58 最後乙個單詞的長度

給定乙個僅包含大小寫字母和空格 的字串,返回其最後乙個單詞的長度。如果不存在最後乙個單詞,請返回 0 說明 乙個單詞是指由字母組成,但不包含任何空格的字串。示例 輸入 hello world 輸出 5 usr bin python3 coding utf 8 time 2018 7 7 author...

LeetCode 58 最後乙個單詞的長度

今天開始保持記錄leetcode題.給定乙個僅包含大小寫字母和空格 的字串,返回其最後乙個單詞的長度。如果不存在最後乙個單詞,請返回 0 說明 乙個單詞是指由字母組成,但不包含任何空格的字串。示例 輸入 hello world 輸出 51 使用string.trim 方法首先刪除字串兩端的空格。2 ...