Lintcode364 Trapping Rain Water II solution 題解

來源:互聯網
上載者:User

標籤:image   而且   HERE   where   迴圈   img   targe   lint   blog   

【題目描述】

 

 

Given non-negative integers representing an elevation map 2d where the area of each cell is 1x1, compute how much water it is able to trap after raining.

 

  

給定n x m非負整數,表示二維的海拔地圖,每個單元的面積是1 x 1,計算下雨後能捕到多少水。

 

  

【題目連結】

www.lintcode.com/en/problem/trapping-rain-water-ii/

【題目解析】

首先我們應該能分析出,能裝水的底面肯定不能在邊界上,因為邊界上的點無法封閉,那麼所有邊界上的點都可以加入queue,當作BFS的啟動點,同時我們需要一個二維數組來標記訪問過的點,訪問過的點我們用紅色來表示,那麼如所示:

  

我們再想想,怎麼樣可以成功的裝進去水呢,是不是周圍的高度都應該比當前的高度高,形成一個凹槽才能裝水,而且裝水量取決於周圍最小的那個高度,有點像木桶原理的感覺,那麼為了類比這種方法,我們採用類比海平面上升的方法來做,我們維護一個海平面高度mx,初始化為最小值,從1開始往上升,那麼我們BFS遍曆的時候就需要從高度最小的格子開始遍曆,那麼我們的queue就不能使用普通隊列了,而是使用優先順序隊列,將高度小的放在隊首,最先取出,這樣我們就可以遍曆高度為1的三個格子,用綠色標記出來了,如所示:

  

向周圍BFS搜尋的條件是不能越界,且周圍格子未被訪問,那麼可以看出上面的第一個和最後一個綠格子無法進行進一步搜尋,只有第一行中間那個綠格子可以搜尋,其周圍有一個灰格子未被訪問過,將其加入優先隊列queue中,然後標記為紅色,如所示:

  

那麼優先隊列queue中高度為1的格子遍曆完了,此時海平面上升1,變為2,此時我們遍曆優先隊列queue中高度為2的格子,有3個,如綠色標記所示:

  

我們發現這三個綠格子周圍的格子均已被訪問過了,所以不做任何操作,海平面繼續上升,變為4,遍曆所有高度為4的格子,如綠色標記所示:

  

由於我們沒有特別聲明高度相同的格子在優先隊列queue中的順序,所以應該是隨機的,其實誰先遍曆到都一樣,對結果沒啥影響,我們就假設第一行的兩個綠格子先遍曆到,那麼那麼周圍各有一個灰格子可以遍曆,這兩個灰格子比海平面低了,可以存水了,把存水量算出來加入結果res中,如所示:

  

中這兩個遍曆到的藍格子會被加入優先隊列queue中,由於它們的高度小,所以下一次從優先隊列queue中取格子時,它們會被優先遍曆到,那麼左邊的那個藍格子進行BFS搜尋,就會遍曆到其左邊的那個灰格子,由於其高度小于海平面,也可以存水,將存水量算出來加入結果res中,如所示:

  

等兩個綠格子遍曆結束了,它們會被標記為紅色,藍格子遍曆會先被標記紅色,然後加入優先隊列queue中,由於其周圍格子全變成紅色了,所有不會有任何操作,如所示:

  

此時所有的格子都標記為紅色了,海平面繼續上升,繼續遍曆完優先隊列queue中的格子,不過已經不會對結果有任何影響了,因為所有的格子都已經訪問過了,此時等迴圈結束後返回res即可,

【參考答案】

www.jiuzhang.com/solutions/trapping-rain-water-ii/



 

Lintcode364 Trapping Rain Water II solution 題解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.