【LeetCode】Trapping Rain Water

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   sp   for   

Trapping Rain Water

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

For example, 
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

 

雙指標i,j分別從首尾開始掃,記當前i指標遇到的最大值為leftWall,j指標遇到的最大值為rightWall

(1)leftWall <= rightWall

對於i指標指向的位置,被trap的值為(leftWall-A[i])。

i前進一個位置。

解釋如下:

a.如果i與j之間不存在比leftWall大的值,那麼i位置trap的值就取決與leftWall與rightWall的較小值,也就是leftWall

b.如果i與j之間存在比leftWall大的值,其中離leftWall最近的記為newLeftWall,那麼i位置trap的值就取決與leftWall與newLeftWall的較小值,也就是leftWall

(2)leftWall > rightWall

對於j指標指向的位置,被trap的值為(rightWall-A[j])。

j前進一個位置。

解釋同上。

 

class Solution {public:    int trap(int A[], int n) {        if(n < 3)   //at least 3 integers            return 0;                int i = 0;        int j = n-1;        int leftWall = 0;        int rightWall = 0;        int ret = 0;        while(i <= j)        {            //update leftWall and rightWall            leftWall = max(leftWall, A[i]);            rightWall = max(rightWall, A[j]);            if(leftWall <= rightWall)            {//no matter whether there is a more higher wall between leftWall and rightWall             //A[i] is dependent on leftWall if leftWall <= rightWall                ret += (leftWall-A[i]);                i ++;            }            else            {//no matter whether there is a more higher wall between leftWall and rightWall             //A[j] is dependent on rightWall if rightWall < leftWall                ret += (rightWall-A[j]);                j --;            }        }        return ret;    }};

【LeetCode】Trapping Rain Water

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.