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 }