Leetcode-Trapping Rain Water

來源:互聯網
上載者:User

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

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!

Analysis:

We scan the whole array twice. First: from head to end; Second: from end to start.

In every scan, we record the current bar for rain trapping. If the value of current column is less than the bar, then current store += bar-currentValueOfColumn; Else, current store is end, we then add the current store into the total store, and reset the bar as currentValueOfColumn.

Solution:

 1 public class Solution { 2     public int trap(int[] A) { 3         if (A.length==0) return 0; 4         if (A.length==1) return 0; 5         int index = 1; 6         int bar = A[0]; 7         int total = 0; 8         int curStore = 0; 9         boolean[] count = new boolean[A.length];10         11         //We need to record which column has been counted during the first scan. 12         for (int i=0;i<count.length;i++) count[i] = false;13         List<Integer> countList = new ArrayList<Integer>();14         15         while (index<A.length){16             int curBar = A[index];17             if (curBar<bar){18                 curStore+= (bar-curBar);19                 countList.add(index);20             } else {21                 total += curStore;22                 curStore = 0;23                 bar = curBar;24                 for (int i=0;i<countList.size();i++) count[countList.get(i)]=true;25                 countList.clear();26             }27             index++;28         }29 30         bar = A[A.length-1];31         index = A.length-2;32         curStore = 0;33         while (index>=0){34             int curBar = A[index];35             if (curBar<bar && !count[index])36                 curStore+= (bar-curBar);37             else if (curBar>bar){38                 total += curStore;39                 curStore = 0;40                 bar = curBar;41             } 42             index--;43         }44 45 46         return total;      47     }48 }

NOTE: We need to record which column has been counted in the first scan, we then ignor these column in the second scan.

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.