leetcode1162

1つのアイデア、暴力行為、残業。

1つの インポートSYS
 2  クラスのソリューション:
 3      DEF maxDistance(自己、グリッド:' リスト[リストの[int] ') - > INT 4          行= LEN(グリッド)
 5          カラム= LEN(グリッド[ 0 ])
 6          ウォーターズ= [ ]
 7          ランド= []
 8          ための I における範囲(行):
 9              のための J における範囲(カラム):
 10                  であればグリッド[I] [J] == 0 11                     waters.append([I、J])
 12                  13                      lands.append([I、J])
 14          結果= - 1 
15          のための I における範囲(LEN(水)):
 16              curmin = sys.maxsize
 17               J 範囲(LEN(ランド)):
 18                  CUR = ABS(水[I] [ 0 ] -lands [j] [ 0 ])+ ABS(水[I] [ 1 ] [j]を-lands [ 1 ])
 19                  もし CUR < curmin:
 20                      curmin = CUR
21              もし curmin = sys.maxsizeとcurmin>!結果:
 22                  結果= curmin
 23          リターン結果

 

アイデア2、DFS、タイムアウト:

1つの インポートSYS
 2  クラスのソリューション:
 3つの     DEF DFS(自己、グリッド、行、列、I、J、訪問、dirct、経路、DP):
 4          あれば、私は< 0またはI> =行またはJ < 0またはj>は= カラム:
 5              リターン - 1 
6          場合訪問[I] [J] == 1 7              リターン - 1 
8          もしグリッド[I] [J] == 1 9              のリターン経路
 10          であればグリッド[I] [J] == 0とDP [I] [J]> 0 11              リターン経路+ dpが[i] [j]は
 12          [I] [J] =訪問1 
13          MINVAL = sys.maxsize
 14          のためのディにおいて:dirct
 15              、X = I +ジ[ 0 ]
 16              、Y = J +ジ[ 1 ]
 17              RESの=のself.dfs(グリッド、行、列、X、Y、訪問、dirct、経路+ 1 、DP)
 18              なら RES = - !1及びRES < MINVAL:
 19                  MINVAL =のRES
 20  
21          [I] [j]を訪問= 0 
22          もし!MINVAL = sys.maxsize:
 23              リターンMINVAL
 24          25              リターン - 1 
26  
27      DEF maxDistance(自己、グリッド:' リスト[リストの[int] ') - > INT 28          行= LEN(グリッド)
 29          カラム= LEN(グリッド[ 0 ])
 30          であれば、行== 0または列== 0 31              リターン - 1 
32          maxdis = - 1 
33は、          訪問= [ 0  _ 範囲(列)] のための _ 範囲(行)]
 34          dirct = [ - 10 ]、[ 01 ]、[ 10 ]、[ 0、 - 1 ]
 35          DP = [ [ 0   _ 範囲(列)] のための _ 範囲(行)]
 36          のための I における範囲(行):
 37               J における範囲(カラム):
 38                  もしグリッド[I] [J] == 0 39                      DIS = self.dfs(グリッド、行、列、I、J、訪問、dirct、0 、DP)
 40                      DP [I] [J] = DIS
 41                      なら DIS> 0とmaxdis < DIS:
 42                          maxdis = DIS
 43                          #print(DIS)
 44          #print(DP)
 45          リターン maxdis

 

3考えると、BFSは、正しい選択する必要があります。

ゲームはそれをしなかった場合には、DFSの一時間に従事、我々は非常に同様の問題の前に会った、また、DFSを使用TLE、BFSは、ACを使用することができます。

私は与え、それをしないの回答を参照すること。

1  クラスソリューション{
 2      公共 INT maxDistance(INT [] []グリッド){
 3          int型 M = grid.length、N =グリッド[ 0 ] .LENGTH。
4つの          ブール[] []訪問= 新しいブール値[M] [N]。
5          キュー< INT []> Q = 新しい LinkedListの<> ();
6          のためには、int型、I = 0 ; iが<M; iが++ ){
 7              INT J = 0 ; J <nであり、j ++ ){
 8                  た場合(グリッド[I] [J] ==1 ){
 9は、                      [I] [j]は=訪れ10                      q.offer(新しい INT [] {I、J})。
11                  }
 12              }
 13          }
 14          のint [] [] DIRS = 新しい INT [] [] {{ 10 }、{ 01 }、{ - 10 }、{ 0、 - 1 }}。
15          int型の結果= - 1 16          (!q.isEmpty()){
 17              のintサイズ= q.size()。
18              一方(size--> 0 ){
 19                  のint [] CUR = q.poll()。
20                  結果= Math.max(その結果、グリッド[CUR [ 0 ] [CUR [ 1 ] - 1 )。
21                  のためにINT [] DIR:DIRS){
 22                      、INT X = CUR [ 0 ] + DIR [ 0 ]、Y = CUR [ 1 ] + DIR [ 1 ]。
23                      であれば(x> = 0 && X <M && Y> = 0&& Y <N &&!訪問[X] [Y]){
 24                          [X] [Y]は=訪れ25                          グリッド[X] [Y] =グリッド[CUR [ 0 ] [CUR [ 1 ]] + 1 26                          q.offer(新しい INT [] {X、Y})。
27                      }
 28                  }
 29              }
 30          }
 31          リターン結果== 0- 1 :結果;
32      }
 33 }

 

私の実際の状況によると、私は算数の練習を自分自身に多くの時間を与えているとして、今では、最終的な評価の私のレベルのアルゴリズムのための時間です。

実際のデータ転送速度:

leetcode周レース:一般的に90分、4問題2。

書かれたインターネット補正ストローク:120分4問題は、一般に、1つを示します。

私は他の学生は、このようなことする質問をしました。

最終的な評価:「ショートボードを記入し、平均レベルのアルゴリズムを達成するために努力し、」アルゴリズムの練習の目標としてをする - 目標は到達します。

過去数ヶ月自分の努力に感謝します。

おすすめ

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