[Swift]LeetCode699. 掉落的方塊 | Falling Squares

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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.

Runtime: 1272 ms
Memory Usage: 19.5 MB
 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 }
相關文章
相關標籤/搜索