★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-angxracx-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
On an infinite number line (x-axis), we drop given squares in the order they are given.git
The i
-th square dropped (positions[i] = (left, side_length)
) is a square with the left-most point being positions[i][0]
and sidelength positions[i][1]
.github
The square is dropped with the bottom edge parallel to the number line, and from a higher height than all currently landed squares. We wait for each square to stick before dropping the next.微信
The squares are infinitely sticky on their bottom edge, and will remain fixed to any positive length surface they touch (either the number line or another square). Squares dropped adjacent to each other will not stick together prematurely.app
Return a list ans
of heights. Each height ans[i]
represents the current highest height of any square we have dropped, after dropping squares represented by positions[0], positions[1], ..., positions[i]
.ide
Example 1:spa
Input: [[1, 2], [2, 3], [6, 1]] Output: [2, 5, 5] Explanation:
After the first drop of positions[0] = [1, 2]: _aa _aa -------
The maximum height of any square is 2.code
After the second drop of positions[1] = [2, 3]: __aaa __aaa __aaa _aa__ _aa__ --------------
The maximum height of any square is 5. The larger square stays on top of the smaller square despite where its center of gravity is, because squares are infinitely sticky on their bottom edge.htm
After the third drop of positions[1] = [6, 1]: __aaa __aaa __aaa _aa _aa___a --------------
The maximum height of any square is still 5. Thus, we return an answer of [2, 5, 5]
.blog
Example 2:
Input: [[100, 100], [200, 100]] Output: [100, 100] Explanation: Adjacent squares don't get stuck prematurely - only their bottom edge can stick to surfaces.
Note:
1 <= positions.length <= 1000
.1 <= positions[i][0] <= 10^8
.1 <= positions[i][1] <= 10^6
.在無限長的數軸(即 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] 解釋: 第一個方塊 掉落: 方塊最大高度爲 2 。 第二個方塊 掉落: 方塊最大高度爲5。 大的方塊保持在較小的方塊的頂部,不論它的重心在哪裏,由於方塊的底部邊緣有很是大的粘性。 第三個方塊 掉落: 方塊最大高度爲5。 所以,咱們返回結果 positions[0] = [1, 2]_aa _aa -------positions[1] = [2, 3]__aaa __aaa __aaa _aa__ _aa__ --------------positions[1] = [6, 1]__aaa __aaa __aaa _aa _aa___a --------------[2, 5, 5]。
示例 2:
輸入: [[100, 100], [200, 100]] 輸出: [100, 100] 解釋: 相鄰的方塊不會過早地卡住,只有它們的底部邊緣才能粘在表面上。
注意:
1 <= positions.length <= 1000
.1 <= positions[i][0] <= 10^8
.1 <= positions[i][1] <= 10^6
.1 class Solution { 2 func fallingSquares(_ positions: [[Int]]) -> [Int] { 3 var n:Int = positions.count 4 var cur:Int = 0 5 var heights:[Int] = [Int](repeating:0,count:n) 6 var res:[Int] = [Int]() 7 for i in 0..<n 8 { 9 var len:Int = positions[i].last! 10 var left:Int = positions[i].first! 11 var right:Int = left + len 12 heights[i] += len 13 for j in (i + 1)..<n 14 { 15 var l:Int = positions[j].first! 16 var r:Int = l + positions[j].last! 17 if l < right && r > left 18 { 19 heights[j] = max(heights[j], heights[i]) 20 } 21 } 22 } 23 for h in heights 24 { 25 cur = max(cur, h); 26 res.append(cur) 27 } 28 return res 29 } 30 }