-
バイナリインデックスツリー:C++での範囲の更新と範囲のクエリ
ここでは、最初はすべての要素が0であるサイズnの配列が与えられています。また、その配列に対して実行されるクエリがいくつかあります。クエリには2つのタイプがあります- update(l、r、value) −インデックスlからrの間にある配列の要素に値を追加します。たとえば、update(2、4、5)は、要素2をインデックス4と5の要素に配置することで配列を更新します。 getRangeSum(l、r) −lからrまでの要素の範囲内の要素の合計を求めます。たとえば、getRangeSum(4、7)は、インデックス4、5、6、7のすべての要素の合計を検索します。 問題を理解する
-
C++で角かっこを使用した文字列への二分木
この問題では、二分木が与えられます。私たちのタスクは、C++でバイナリツリーを角かっこ付きの文字列に変換するプログラムを作成することです。 二分木の値は整数であり、事前順序トラバースの方法でプログラムに供給されます。文字列には整数と括弧()のみを含める必要があります。また、文字列を最適化する必要があります。つまり、空のペアをすべて削除する必要があります。 二分木 は、各ノードが最大2つの子を持つことができるという特別な条件を持つツリーです。 二分木の例- プレオーダートラバーサル:[4、1、8、3、9、2、5] 問題を理解するために例を見てみましょう − 入力 preorde
-
Linuxのパイプ用Cプログラム
ここでは、Linuxでパイプ用のCプログラムを作成します 。このプログラムでは、入力ストリームからテキストを読み取り、それを出力画面に出力します。 まず、パイプの基本を学びましょう。 Linuxの場合 パイプ データの転送に使用され、LinuxまたはUnixベースのシステムで2つの間で標準出力を転送するためのプロセス/コマンド/プログラム間の通信に使用できます。 注意すべき重要な点の1つは、パイプは単方向であるということです。つまり、データはプログラム内で左から右または右から左に流れることができます。 ここでは、ユーザーからの入力を読み取り、出力画面に出力するパイプを作成します。実装は
-
C++のストロボグラマティックナンバーIII
(低と高)の範囲に存在するストロボグラマティック数の合計をカウントする関数を定義するとします。ストロボグラマティック数は、180度回転したときに同じように見える数であることがわかっています。 したがって、入力がlow =50、high =100のようである場合、69、88、および96の3つの結果があるため、出力は3になります。 これを解決するには、次の手順に従います- 関数findStrobogrammatic()を定義します。これにはnが必要です 配列retを定義する n&1がゼロ以外の場合、- retの最後に「0」を挿入します retの最後に「1」を挿入し
-
C++でのペイントハウスII
n個の家が並んでいるとすると、各家はk色のいずれかでペイントできます。特定の色の家ごとの塗装費は異なります。ここで、隣接する2つの家が同じ色にならないように、すべての家をペイントする必要があることに注意する必要があります。 各家を特定の色で塗るコストは、次数nxkの行列で表されます。そして、すべての家を塗装するための最小コストを見つける必要があります。 したがって、入力が次のような場合 1 5 3 2 9 4 この場合、出力は5になります。ペイントハウス0をカラー0に、ペイントハウス1をカラー2にすると、最小コストは1 + 4=5になります。または、
-
C++のエイリアン辞書
新しい異星言語があり、それがラテンアルファベットを使用していると仮定します。ただし、文字間の順序は不明です。辞書にある空でない単語のリストがあります。これらの単語は、この新しい言語の規則に従って辞書式に並べ替えられています。この言語の文字の順序を見つける必要があります。 したがって、入力が[wrt、 wrf、 er、 ett、 rftt]の場合、出力は wertfになります。 これを解決するには、次の手順に従います- 次数と呼ばれる1つのマップを定義します グラフと呼ばれる1つのマップを定義する n:=単語のサイズ 初期化i:=0の場合、i <単語のサイズの場合、更
-
C++で最も近い二分探索木値II
二分探索木とターゲット値があるとします。そのBSTで、ターゲットに最も近いk個の値を見つける必要があります。目標値は浮動小数点数であることに注意する必要があります。 kは常に有効であり、k≤合計ノードであると想定できます。 したがって、入力が次のような場合 target =3.714286、k =2の場合、出力は[4,3]になります。 これを解決するには、次の手順に従います- 関数pushSmaller()を定義します。これにより、ノード、スタックst、およびターゲットが取得されます。 ノードが存在しない場合は、-を実行します ノードの値が<ターゲットの場合、-
-
C++の単語パターンII
strというパターンと文字列があるとすると、strが同じパターンに従うかどうかを確認する必要があります。ここで、パターンフォローは完全一致を意味し、パターン内の文字とstr内の空でない部分文字列の間に全単射があります。 したがって、入力が「abaa」、strが「orangegreenorangeorange」のような場合、出力はtrueになります これを解決するには、次の手順に従います- 関数solve()を定義します。これには、i、j、ptr、s、マップm、usedと呼ばれる1つのセットが必要です。 =ptrのサイズの場合、- trueを返す =ptrのサイズの場
-
C++で最高のミーティングポイント
2人以上のグループがあり、彼らが会って総移動距離を最小化したいとします。値0または1の2Dグリッドがあり、各1はグループ内の誰かの家を示します。距離はマンハッタン距離の式を使用して計算されるため、distance(p1、p2)=| p2.x --p1.x | + | p2.y--p1.y|。 したがって、入力が次のような場合 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 この場合、マトリックスから出力は6になります。これは、(0,0)、(0,4)、および(2,2)に住む3人の人々が理解できるためです
-
C++でのバイナリツリーのシリアル化と逆シリアル化
バイナリツリーが1つあり、それらをシリアル化および逆シリアル化する必要があるとします。シリアル化とは、データ構造またはオブジェクトをビットシーケンスに変換して、ファイルまたはメモリバッファに格納し、後で同じまたは別のコンピュータ環境で再構築できるようにするプロセスであることを知っています。 ここでは、バイナリツリーをシリアル化および逆シリアル化するためのアルゴリズムを考案する必要があります。二分木は、各ノードに2つ以下の子を持つルートツリーです。 したがって、入力が次のような場合 その場合、出力はSerialize − 1 2 3 4 5 N N N N N N Deseri
-
C++で黒いピクセルを囲む最小の長方形
画像があり、その画像が、0が白のピクセル、1が黒のピクセルのバイナリ行列で表されているとします。ここでは黒いピクセルが接続されているため、黒い領域は1つだけです。ピクセルは水平方向と垂直方向に接続されています。黒のピクセルの1つの位置(x、y)がある場合、すべての黒のピクセルを囲む最小の(軸に沿った)長方形の領域を見つける必要があります。 したがって、入力が次のような場合 0 0 1 0 0 1 1 0 0 1 0 0 x =0、y =2の場合、出力は6になります これを解決するには、次の手順に従います- 1つの2
-
Range Sum Query2D-C++で変更可能
行列と呼ばれる2D行列があるとすると、左上隅と右下隅で定義される長方形内の要素の合計を計算する必要があります。 したがって、入力が次のような場合 3 0 1 4 2 5 6 3 2 1 1 2 0 1 5 4 1 0 1 7 1 0 3 0 5 合計を見つけて値を更新するメソッドもそうなります sumRegion(2、1、4、3) update(3、2、2) sumRegion(2、1、4、3)、 上記の長方形(緑色)は(2,1)と(4、3)で定義され、合
-
C++のすべての建物からの最短距離
最短距離ですべての建物に到達する空き地に家を作りたいとします。上下左右の4方向しか動かせません。値0、1、または2の2Dグリッドがあります。ここで- 0は、自由に通り過ぎることができる空き地を表します。 1は私たちが通り抜けることができない建物を表しています。 2は私たちが通り抜けることができない障害物を表しています。 したがって、入力が次のような場合 1 0 2 0 1 0 0 0 0 0 0 0 1 0 0 (0,0)、(0,4)、(2,2)に3つの建物があり、(0,2)に障害物がある
-
C++で最大K個の異なる文字を含む最長のサブストリング
文字列があるとします。最大でk個の異なる文字を含む最長の部分文字列Tの長さを計算する必要があります。 したがって、入力がs =eceba、k =2の場合、Tは eceであり、長さは3であるため、出力は3になります。 これを解決するには、次の手順に従います- ans:=0 1つのマップを定義するm n:=sのサイズ x:=0 初期化j:=0、i:=0の場合、j
-
文字列kの距離をC++で並べ替える
空でない文字列sと整数kがあるとします。同じ文字が少なくとも互いに距離kになるように、文字列を再配置する必要があります。指定された文字列は小文字です。文字列を再配置する方法がない場合は、空の文字列になります。 したがって、入力がs =aabbcc、k =3の場合、同じ文字が少なくとも互いに3の距離にあるため、出力はabcabcになります。 これを解決するには、次の手順に従います- ret:=空の文字列 1つのマップを定義するm n:=sのサイズ 初期化i:=0の場合、i
-
C++での完璧な長方形
N個の軸に沿った長方形があるとすると、それらがすべて一緒になって長方形領域の正確なカバーを形成するかどうかを確認する必要があります。ここでは、各長方形は左下の点と右上の点として表されます。したがって、単位正方形は[1,1,2,2]として表されます。 (左下の点は(1、1)で、右上の点は(2、2)です。) したがって、入力が長方形のような場合=[[1,1,3,3]、[3,1,4,2]、[3,2,4,4]、[1,3,2,4]、 [2,3,3,4]]の場合、5つの長方形すべてが一緒になって長方形領域の正確なカバーを形成するため、出力はtrueになります。 これを解決するには、次の手順に従い
-
C++での最小の一意の単語の略語
「word」などの文字列があり、次の略語が含まれているとします。[word、 1ord、 w1rd、 wo1d、 wor1、 2rd、 w2d、 wo2、 「1o1d」、「1or1」、「w1r1」、「1o2」、「2r1」、「3d」、「w3」、「4」]。また、辞書にはターゲット文字列と文字列のセットがあります。辞書内の文字列の略語と競合しないように、可能な限り短い長さのこのターゲット文字列の略語を見つける必要があります。ここでは、略語の各数字または文字は長さ=1と見なされます。したがって、例として、略語「a32bc」の長さは4です。 したがって、入力が「apple」のようで、辞書が[blade
-
C++のワードスクエア
単語のセットがあり(すべてが一意である)、すべてのワードスクエアを検索する必要があり、それらから構築できます。ここで、k番目の行と列がまったく同じ文字列を読み取る場合、単語のシーケンスは有効なワードスクエアを形成します。ここで、0≤k
-
C++でのN-aryツリーのシリアル化と逆シリアル化
N-aryツリーが1つあり、それらをシリアル化および逆シリアル化する必要があるとします。シリアル化とは、データ構造またはオブジェクトをビットシーケンスに変換して、ファイルまたはメモリバッファに格納し、後で同じまたは別のコンピュータ環境で再構築できるようにするプロセスであることを知っています。 ここでは、N-aryツリーをシリアル化および逆シリアル化するためのアルゴリズムを考案する必要があります。 N-aryツリーは、各ノードにN個以下の子を持つルートツリーです。 したがって、入力が次のような場合 その場合、出力はシリアル化:1#3 2 4#5 6 #####および逆シリアル化ツリー
-
N-aryツリーをC++でバイナリツリーにエンコードする
N-aryツリーがあるとします。そのツリーを1つのバイナリにエンコードする必要があります。また、バイナリツリーをN-aryツリーに逆シリアル化するためにデシリアライザーを作成する必要があります。 したがって、入力が次のような場合 その場合、出力は次のようになります これを解決するには、次の手順に従います- 関数encode()を定義します。これはルートになります ルートが有効な場合、- nullを返す node=ルートの値を持つ新しいツリーノード ルートの子のサイズが0でない場合、- ノードの左側:=encode(ルートのchildre