C++での最小ブラケット追加
'('および')'のみを含む文字列sがあるとすると、文字列のバランスをとるために挿入できる括弧の最小数を見つける必要があります。
したがって、入力が「(()))(」の場合、出力は「(()))(」のように2になります。これは、「((()))()」のようにバランスをとることができます。
これを解決するには、次の手順に従います-
-
:=0、cnt:=0
-
初期化i:=0の場合、i
-
s[i]が'('と同じ場合、-
-
(oを1増やします)
-
-
それ以外の場合
-
oがゼロ以外の場合、-
-
(oを1つ減らします)
-
-
それ以外の場合
-
(cntを1増やします)
-
-
-
-
cnt+oを返す
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(string s) { int o = 0; int cnt = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == '('){ o++; } else { if(o) o--; else cnt++; } } return cnt + o; } }; int main(){ Solution ob; cout << (ob.solve("(()))(")); }
入力
Input: "(()))("
出力
2
-
C++での二分木の最小の深さ
二分木があるとしましょう。その木の最小の深さを見つけなければなりません。最小の深さは、ルートノードから最も近いリーフノードまでの最短パスに沿ったノードの数です。 したがって、入力が次のような場合 その場合、出力は2になります これを解決するには、次の手順に従います- ツリーノードの配列aaを定義する aaの最後にルートを挿入します ツリーノードの別の配列akを定義します レベル:=0 ルートがnullの場合、- 0を返す aaのサイズが0に等しくない場合は、-を実行します。 配列akをクリアします (レベルを1上げます)
-
C++での最小の騎士の動き
座標が-無限大から+無限大までの無限のチェス盤があり、正方形[0、0]に騎士がいるとします。騎士は、以下に示すように、8つの可能な動きをすることができます。それぞれの動きは、基本方向に2マス、次に直交方向に1マスです。 騎士を正方形[x、y]に移動するために必要な最小ステップ数を見つける必要があります。答えが存在することが保証されています。 したがって、入力がx=5およびy=5の場合、出力は4になります。これは[0,0]→[2,1]→[4,2]→[3,4]→[のようになります。 5,5] これを解決するには、次の手順に従います- マップを定義するm Solve()とい