トピック:入力アレイ及びaはソートを昇順番号を有し、配列内で検索するために、2つの数値を必要とし、デジタル入力に正確に等しいこれら二つの数字、デジタル出力の任意のペアは、時間の複雑さを必要とすることがOであります(N-);
分析:ソートされた配列{... I ... J ... K ...上昇のために Mを......}、 iがm = J + Kを+のみであってもよいが( J およびKは、同一番号でもよい)、中間無視する両側から収縮することができます他のクロス合計ケースと
問題解決:
1 空隙 FindSumFactor(INT *配列、int型の長さ、int型SUM){ 2 INT左= 0、=長さ右1 、 図3 、一方(真の){ 4 / * * 5 *と電流の和よりも小さい場合には、左右にモバイル; 6 *と電流は、左から右に移動和よりも大きい場合に 7 各のみポインタを移動するため*、左右とは確かに一致する 8を 心配アレイオーバーフローが存在しない* 9。 * * / 10 IF(配列[左] +配列[右] < SUM){ 図11は、 ++を残し、 12である } 他 IF(配列[左] +配列[右]> SUM){ 13で 右- ; 14 } 15 16 / * * 17 *は個別であるか否かを同じ判断ので、左処理及び右ことができる 18であります *重複は、それらの合計が等しく、 19。 * * / 20である IF(配列[左] +配列[右] == 合計){ 21である のprintf(" \ nの和因子である:D%は、D%\ N- " 、 22 アレイ[左]、配列[右])。 23 出口(0 ); 24 } 25 26 であれば(左> = 右){ 27 のprintf(" \ nfail和因子の\ nを見つけること" )。 28 出口(0 ); 29 } 30 } 31 }
トピック: 2元検索ツリーを入力して、二つの方法で生成された再帰ループミラーツリー、すなわち木の左の部分木のノードは、新しい右サブツリーのノードよりも大きいの使用を必要とします。
分析:補助構造を持たない単一のソースは、再帰サイクルを達成することができることができる、マルチソース(DFSとBFS)再帰サイクルを達成するために、補助構造の使用を必要とします。
問題解決:
1 / * * 2 電流スイッチング電流の左と右のサブツリーの*、次いで左及び方法の右サブツリーを再帰的に 3 *は、最終的に、ツリーのトップに現在のノードを返します。サブツリーがNULLサブツリーに対応するときことに注意 4 *提供 。5 * * / 6ノードは* RecursiveMirrorTree(ノード* 現在){ 7 ノード*のTEMPを=>の電流ために左、 8を IF(電流-するため>右!= NULL){ 図9 の電流に> = RecursiveMirrorTree(電流-する>左、右); 10 } ほか 11。 / * * 12れる *がエラーに変化しない場合に、ここで注意しなければならない 13 * * / 14 >左=の電流ために、NULLを 15 16 IF(TEMP =!{NULL) 17。 >右=の電流ために、RecursiveMirrorTree(TEMP)を 18れる } そう 19。 >右=の電流ためにNULLを、 20である 21ことで 戻り現在、 22である } 23れます * / * 24 *単一の再帰的ソース(のみ再帰が発生し)、通常のサイクルを解決することができるため、マルチソースのための再帰 25 *(複数の再帰は、左右のサブツリーとして、発生した)、補助データ構造が使用されなければならない、またはスタック 26がある *またはキュー 27 * * / 28 空隙 NonRecursiveMirrorTree(ノード* ルート){ 29 MyStack *スタック= 新しいMyStack(); 30 stack-> プッシュ(ルート)。 31 ノード*一時、* 現在; 32 ながら(!stack-> のisEmpty()){ 33 、電流= stack-> POP(); 34 TEMP =電流- > 左。 35 36 場合(電流- >右!= NULL){ 37 の電流> =電流- >左、右。 38 stack->プッシュ(電流- > 右)。 39 } 他に 40 電流> =左NULLを。 41 42 であれば(TEMP =!NULL){ 43 の電流>右= TEMP。 44 stack-> プッシュ(TEMP)。 45 } そうでなければ 46 の電流>右= NULLを。 47 } 48 削除スタック。 49 }
ます。https://www.cnblogs.com/leo-chen-2014/p/3735588.htmlで再現