【leetcode】Trapping Rain Water

來源:互聯網
上載者:User

標籤:

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.

 

    我做題,一般是按照AC率排序選著做的,這道題一不留神,難度居然還是Hard,好吧,確實也難到了我。AC率居然還蠻高,我也是提交了3次之後才AC的。先說說我前兩次的錯誤思路:第一次,我是對每一個點,往兩邊找最長升序,然後以左右兩邊的這兩個序列的和作為一個坑,用來填雨水。但是針對[5,1,2,1,2,1,2,5]這樣的序列,即在區間內部的升降,其實並不影響其盛水,故WA!第二次個人認為也是能完成的,但是需要考慮的情況比較多,比較煩人,不是最合適的方法,方法是從左至右掃描,掃到第一個比當前高的,作為一個區間,接著從區間末開始繼續往後掃,以此類推,這方法能解決上面的問題,但是最後一個區間需要單獨考慮。

   其實是可以這樣解決的:先找到最高的那個問題maxhigh,然後分別從兩邊往這個節點遍曆,設定一個次高點temphigh,

   如果當前節點比次高點高,則更新次高點,繼續;

   否則,用次高點減去當前節點,就是我們能盛水的體積。

   就是這麼簡單粗暴,唯一的缺陷就是需要兩次掃描,有強迫症的或者追求完美主意的,可以查看下網上的一個方法,是直接從兩邊開始掃描的,一次搞定。個人感覺代碼看上去不夠直觀。

   下面貼一下我自己的代碼:

   

class Solution:    # @param A, a list of integers    # @return an integer    def trap(self, A):        res = 0        if len(A) < 3:            return 0        maxv = 0        maxid = 0        for i in range(len(A)):            if A[i] > maxv:                maxv = A[i]                maxid = i        temphigh = 0        for j in range(maxid):            if A[j] > temphigh:                temphigh = A[j]            else:                res += temphigh - A[j]        temphigh = 0        for j in range(len(A)-1,maxid,-1):            if A[j] > temphigh:                temphigh = A[j]            else:                res += temphigh - A[j]        return res

  

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