leetcode-42-雨水

件名の説明:

 

 最初の投稿:

クラスのソリューション:
     デフトラップ(自動、高さ:リスト[INT]) - > int型:
        RESの = 0
         デフヘルパー(高さ):
            ローカル以外の解像度
            場合 lenは(高さ)<= 1 リターン・
            キュー = []
             のための高さ:
                 もしキュー私は> = キュー[0]:
                    RES + =合計(キュー[0] - jのための J におけるキュー)
                    キュー = [I]
                
                    queue.append(I)
            ヘルパー(キュー[:: -1 ])
        ヘルパー(高さ)
        の戻りRES
            

方法:動的プログラミング:O(N)O(N)

クラスのソリューション:
     DEFの罠(セルフ、高さ:リスト[INT]) - > int型:
         IF  ない高さ:リターン0 
        N- = LEN(高さ)
        max_left = [0] * N- 
        max_right = [0] * N- 
        max_left [0] = 高さ[0] 
        max_right [ -1] =高さ[-1 ]
         #が最大左位置Iを見つける
        ために範囲(1 、N-):
            max_left [I] = MAX(身長[i]は、max_leftの[1-I ] )
         最大値I右の場所を見つける
        ためにI における範囲(N-2、-1、-1 ):
            max_right [I] = MAX(身長[I]、max_right [I + 1 ])
         #1 プリント(max_left)
        #1 プリント(max_right) 
        求结果 
        RES = 0
         以下のための:範囲(N)
            RES - + =分(max_left [I]、max_right [i])と高さ[I]
         戻り RES

方法2:二重ポインタO(N)O(1)

クラスのソリューション:
     デフトラップ(自動、高さ:リスト[INT]) - > int型:
         もし ない高さ:リターン0  = 0  = LEN(高さ) - 1つの
        RES = 0
         记录左右边最大值 
        left_max = 高さ[左] 
        right_max = 高さ[右]
         ながら左< 右:
             もし高さ[左] < 高さ[右]:
                 もし left_max> 高さ[左]:
                    RES+ = left_max - [左]高
                 
                    left_max = 高さ[左]  + = 1
             さもなければもし right_max> 高さ[右]:
                    RES + = right_max - 高[右]
                 
                    right_max = 高さ[右]  - = 1つの 
         リターン RES

方法3:スタックO(N)

クラスのソリューション:
     デフトラップ(自動、高さ:リスト[INT]) - > int型:
         もし ない高さ:リターン0 
        、N = LEN(高さ)
        スタック = [] 
        のres = 0
         のための I における範囲(N):
            印刷(スタック)
            しながらスタック高さが<[-1]スタック] 高さ[I]:
                TMP = stack.pop()
                 場合 ではないスタック:ブレーク
                RESを+ =(MIN(身長[I]、高さ[スタック[-1]) -高さ[TMP])*(I-スタック[-1] - 1 
            stack.append(I)
        の戻り RES

 

おすすめ

転載: www.cnblogs.com/oldby/p/11725643.html