leetcode1289

1  クラスソリューション:
 2      find2Smallest DEF(自己、ARR):
 3          N = LEN(ARR)
 4          minsum1、minsum2 = sys.maxsize、sys.maxsize
 5          minindex1、minindex2 = - 1、 - 1 
6          ための J レンジ(N) :
 7              場合 ARR [J] <= minsum1およびARR [J] <= minsum2:
 8                  minsum2 = minsum1
 9                  minindex2 = minindex1
 10                  minsum1 = ARR [S]
 11                  minindex1 =J
 12              のelif ARR [J]> = minsum1およびARR [J] <= minsum2:
 13                  minsum2 = ARR [J]
 14                  minindex2 = J
 15  
16          リターン[minsum1、minindex1]、[minsum2、minindex2]]
 17  
18      DEF minFallingPathSum (自己、ARR:' リスト[リストの[int] ') - > INT 19          N = LEN(ARR)
 20          なら == nは1 21              戻り ARR [ 0 ] [ 0 ]
 22  
23          のためにI の範囲(1 、N):
 24              DP = self.find2Smallest(ARR [I- 1 ])
 25              のための J レンジ(N):
 26                  であれば J == DP [ 0 ] [ 1 ]:
 27                      ARR [I] [J] + = DP [ 1 ] [ 0 ]
 28                  29                      ARR [I] [J] + = DP [ 0 ] [ 0 ]
 30          リターン分(ARR [ - 1 ])

この質問はleetcode 931直接各行の計算と上記の線の各々が、同じ列にないとTLEれる場合、アップグレードされたバージョン。従って、2つの数値にのみ、最小のラインを保持します。

現在の行の計算では、現在のセルの場合にのみ、同じ列内の前の行のカラムの最小値は、同じカラムであれば、最後から二番目に小さい値に決定されます。それ以外の場合は、最小線を使用します。

 

以下のスキームは、TLEは、比較として使用することができます:

1つの インポートSYS
 2  クラス:ソリューション
 3      minFallingPathSum DEF(自己、ARR:' リスト[リストの[int] ') - > INT 4          N = LEN(ARR)
 5          であれば N == 1 6              戻り ARR [ 0 ] [ 0 ]
 7          DP = [sys.maxsize ため _ 範囲(N)] のための _ 範囲(N)]
 8          DP [ 0 ] = ARR [ 0 ]
 9         minsum = sys.maxsize
 10          のための I における範囲(1 、N):
 11              用の J :レンジ(N)
 12                  のための K における範囲(N):
 13                      なら J =!K:
 14                          DP [I] [J] =分(DP [I]、[J]、DP [I- 1 ] [K] + ARR [I] [J])
 15                          もし I N == - 1 16                              minsum = 分(minsum、DP [I] [J 】)
 17          リターン minsum

 

おすすめ

転載: www.cnblogs.com/asenyang/p/12041730.html