プラン(61〜66)プログラミングの問題を受賞

61は、二つの機能を実装し、バイナリツリーをシリアライズおよびデシリアライズするために使用されます。

これは、バイナリの配列を指す:バイナリツリーがトラバースの結果に応じた形式で保存された文字列のメモリがセットアップバイナリを持続することができるように、。バイナリツリートラバーサル順序が変更されたシリアル化が一次に基づくことができる、配列において、後に、結果のシーケンスは、シンボルへのいくつかの配列によって空白ノード(#)を表す文字列であります!エンド・ノードは、値(値を!)を表します。
直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。

初期:

1つの パブリック クラスソリューション{
 2      列シリアライズ(ツリーノードのルート){
 3          
4    }
 5      ツリーノードデシリアライズ(文字列str){
 6         
7    }
 8 }

コード:

1  クラスツリーノード{
 2      INTヴァル= 0 ;
 3      ツリーノードは=左ヌル;
 4      ツリーノード右= NULL ;
 5  
6。     公共のTreeNode(int型ヴァル)を{
 7。         この .val = ヴァル;
 8  
。9      }
 10  
11  }
 12である 
13である パブリック クラス{ソリューション
 14  
15      // 簡単な操作は、デシリアライズ
16      int型のインデックスを= -1 ; //プライベート静的int型のインデックス= -1、牛では、この製剤はオフに与えられているネットを行います(非常に奇妙な)
17  
18である     文字列シリアル化(ツリーノードルート){
 19  
20である         。// 結果セットオブジェクトの作成
21は          StringBuilderのSB = 新しい新規のStringBuilder();
 22は 
23である         // 再帰出口
24          IF(ルート== NULL ){
 25              sb.append(「#! "); //は、シンボルのいくつかの配列によって空のノード(#)を表す
26が             戻り、sb.toStringを()
 27          }
 28  
29          sb.append(root.val +"「);!// もし空でないノード、 "!値"を入力します
30          sb.append(シリアル化(root.left)); // 左部分木の再帰的なシーケンス
31         sb.append(シリアライズ(root.right)); // 右サブツリーの再帰的配列
32  
33である         戻りsb.toStringを();
 34である     }
 35  
36      デシリアライズ(文字列STR){ツリーノード
 37 [  
38である          、インデックス++ ;
 39  
40          // 閾値
41は、         IF(インデックス> = str.length()){
 42が             リターン nullは43である         }
 44である 
45          のTreeNode ANS = NULL ;
 46は 
47          列[] = ARRのstr.split( "!"); // 区切り文字列
48  
49         もし"#" .equals(ARR [インデックス])){
 50の 
51              戻りANS。
52          }
 53の 
54          ANS = 新しいツリーノード(Integer.parseInt(ARR [インデックス]))。// 重构二叉树
55          ans.left = デシリアライズ(STR)。
56          ans.right = デシリアライズ(STR)。
57の 
58          リターンANS;
59  
60      }
 61 }

 

64は、スライディングウィンドウ指定された配列のサイズとスライディングウィンドウは、すべての値のうちの最大値を求めます。例えば、入力配列のサイズ及び{2,3,4,2,6,2,5,1} 3は、スライディングウィンドウ場合、次いで、それらの最大値は、{4,4,6- 6つのスライディングウィンドウの合計の存在であります6,6,5};それ持つスライディングウィンドウの次の6つのアレイ{2,3,4,2,6,2,5,1}:{[2,3,4]、2,6,2,5 、1}、{2、[3,4,2]、6,2,5,1}、{2,3、[4,2,6]、2、5}、{2,3,4 、[2,6,2]、5,1}、{2,3,4,2、[6,2,5]、1}、{2,3,4,2,6、[2,5、 1]}。

分析:によって警告この質問ウィンドウサイズのスライド、配列の長さは確認とラウンドの合計数、num.length -サイズ1  回。そして、各ラウンドの最大値を比較し、比較プロセスは、借りたアイデアをソートすることもできます。

1つの インポートjava.util.ArrayListのの;
 2  
。3  パブリック クラスソリューション{
 4。     公共のArrayList <整数> maxInWindows(INT [] NUM、int型のサイズ){
 5。 
6。         // 設定されたオブジェクトをもたらす
7          のArrayList <整数> = ANS 新しい新規のArrayList <整数> ();
 8  
9。         IF(NUM == NULL || num.lengthサイズ== == 0 || 0 ||サイズ> num.length){
 10              リターンANS;
 11          }
 12は 
13である         // 各ウィンドウストア最大
14         INT curMax = 0 ;
 15  
16          のためにint型 ; Iは、I = 0 = <  num.length -サイズを、Iは++){ // 制御ラウンド
17  
18である              curMax = NUM [I];
 19。             ためのINT J = I; J < サイズ+ I ; J ++ ){
 20は                 IF(NUM [J]> curMax){
 21は                      curMax = NUM [J];
 22である                 }
 23れる             }
 24  
25              // 結果セットに追加さ
26れる             ans.add(curMax)。
27          }
 28          リターン年。
29      }
 30 }

 

おすすめ

転載: www.cnblogs.com/tubeWang/p/11371600.html