Leetcode 699 掉落的方塊 C

2021-10-08 14:54:42 字數 1760 閱讀 4749

在無限長的數軸(即 x 軸)上,我們根據給定的順序放置對應的正方形方塊。

第 i 個掉落的方塊(positions[i] = (left, side_length))是正方形,其中 left 表示該方塊最左邊的點位置(positions[i][0]),side_length 表示該方塊的邊長(positions[i][1])。

每個方塊的底部邊緣平行於數軸(即 x 軸),並且從乙個比目前所有的落地方塊更高的高度掉落而下。在上乙個方塊結束掉落,並保持靜止後,才開始掉落新方塊。

方塊的底邊具有非常大的粘性,並將保持固定在它們所接觸的任何長度表面上(無論是數軸還是其他方塊)。鄰接掉落的邊不會過早地粘合在一起,因為只有底邊才具有粘性。

返回乙個堆疊高度列表 ans 。每乙個堆疊高度 ans[i] 表示在通過 positions[0], positions[1], …, positions[i] 表示的方塊掉落結束後,目前所有已經落穩的方塊堆疊的最高高度。

示例 1:

輸入: [[1, 2], [2, 3], [6, 1]]

輸出: [2, 5, 5]

解釋:第乙個方塊 positions[0] = [1, 2] 掉落:

_aa_aa

-------

方塊最大高度為 2 。

第二個方塊 positions[1] = [2, 3] 掉落:

__aaa

__aaa

__aaa

_aa__

_aa__

--------------

方塊最大高度為5。

大的方塊保持在較小的方塊的頂部,不論它的重心在**,因為方塊的底部邊緣有非常大的粘性。

第三個方塊 positions[1] = [6, 1] 掉落:

__aaa

__aaa

__aaa

_aa_aa___a

--------------

方塊最大高度為5。

因此,我們返回結果[2, 5, 5]。

示例 2:

輸入: [[100, 100], [200, 100]]

輸出: [100, 100]

解釋: 相鄰的方塊不會過早地卡住,只有它們的底部邊緣才能粘在表面上。

注意:

我們用pheight陣列記錄每乙個方塊的最大高度。顯然,初始條件為pheight(n,0),即每個方塊一開始所在位置都是沒有方塊的。之後,我們放第i塊方塊時,如果i+1~n-1存在乙個方塊會落在第i塊方塊上,那麼pheight[j] = max(pheight[j],pheight[i]),也就是說,第j塊方塊的其實高度可能就變了。使用max,是因為,乙個方塊可能受多個方塊的影響,舉個例子就是,方塊左部分下面有方塊,右部分下面也有方塊,但下面的方塊不是同一塊,在我們分析中,pheight[j] = pheight[i]是只受第i塊方塊影響,還需要考慮到其他方塊,故用了max。

最後,遍歷pheight,獲取答案陣列即可。詳細過程見**

vector<

int>

fallingsquares

(vectorint>>

& positions)}}

vector<

int>

ans(n,0)

;int cur=0;

for(

int i=

0; i)return ans;

}

leetcode 699 掉落的方塊

線段樹 zkw線段樹 初版16ms namespace segtree node insert node root,int l,int r,int h if l root l else 更新最大右邊界 root maxr max r,root maxr return root int query n...

leetcode 840 矩陣中的幻方

3 x 3 的幻方是乙個填充有從 1 到 9 的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。給定乙個由整數組成的 grid,其中有多少個 3 3 的 幻方 子矩陣?每個子矩陣都是連續的 示例 輸入 4,3,8,4 9,5,1,9 2,7,6,2 輸出 1 解釋 下面...

C 驗證LeetCode包圍區域的DFS方法

在leetcode中的surrounded regions 包圍區域這道題中,我們發現用dfs方法中的最後乙個條件必須是j 1,如下面的紅色字型所示,如果寫成j 0的話無法通過oj,一直百思不得其解其中的原因,直到有告訴我說他驗證了最後乙個大集合在本地機子上可以通過,那麼我也來驗證看看吧。class...