Twitter演算法面試題詳解(Java實現)——Trapping Rain Water

來源:互聯網
上載者:User

標籤:

【演算法題:求出高低不同的磚中能存多少水】

「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. 

 

解法思路:先找出數列中最左和最右的數值最大值,序號為p、q(若最大值唯一則p、q相同),然後分三段計算存水量,具體代碼如下:

 1 /* 2  * 演算法題:求高低不同的磚中能存多少水 3  */ 4  5 import java.util.ArrayList; 6 import java.util.List; 7  8 public class FillWater { 9 10     public static void main(String[] args) {11 12         int num[] = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 };13         List<Integer> stone = new ArrayList<Integer>();14         for (int i = 0; i < num.length; i++) {15             stone.add(num[i]);16         }17         int result = 0;18         int p = 0, q = 0;// 找出左右最高點序號19         for (int j = 0; j < stone.size(); j++) {20             if (stone.get(j) > stone.get(p)) {21                 p = j;22                 q = j;23             } else if (stone.get(j) == stone.get(p)) {24                 q = j;25             }26             System.out.println("p: " + p + " , q: " + q);27         }28         result += calcL(stone.subList(0, p + 1)) + calcH(stone.subList(p, q + 1))29                 + calcR(stone.subList(q, stone.size()));30 31         System.out.println("result: " + result);32     }33 34     // 處理中段:p-q35     static int calcH(List<Integer> a) {36         int waterHigh = 0;37         for (int i = 0; i < a.size(); i++) {38             waterHigh += a.get(0) - a.get(i);39         }40         System.out.println("waterHigh: " + waterHigh);41         return waterHigh;42     }43 44     // 處理左段:0-p45     static int calcL(List<Integer> a) {46         int waterLeft = 0;47         for (int i = 1; i < a.size(); i++) {48             if (a.get(i) < a.get(i - 1)) {49                 waterLeft += a.get(i - 1) - a.get(i);50                 a.set(i, a.get(i - 1));51             }52         }53         System.out.println("waterLeft: " + waterLeft);54         return waterLeft;55     }56 57     // 處理右段:q-end58     static int calcR(List<Integer> a) {59         int waterRight = 0;60         for (int i = a.size() - 2; i > 0; i--) {61             if (a.get(i) < a.get(i + 1)) {62                 waterRight += a.get(i + 1) - a.get(i);63                 a.set(i, a.get(i + 1));64             }65         }66         System.out.println("waterRight: " + waterRight);67         return waterRight;68     }69 70 }

 

Twitter演算法面試題詳解(Java實現)——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.