-
C++での最後の単語の長さ
文字列sがあるとします。 sは、任意の英字と空白を保持できます。文字列の最後の単語の長さを見つける必要があります。最後の単語がない場合は、0を返します。 したがって、入力が「プログラミングが大好き」のような場合、出力は11になります これを解決するには、次の手順に従います- n:=0 文字列内の単語の温度ごとに- n:=温度のサイズ nを返す 例 理解を深めるために、次の実装を見てみましょう- #include <bits/stdc++.h> using namespace std; class Solution { public: &nbs
-
C++のソート済みリストから重複を削除する
ソートされたリンクリストがあるとします。各要素が1回だけ表示されるように、すべての重複を削除する必要があります。 したがって、入力が[1,1,2,3,3,3,4,5,5]の場合、出力は[1,2,3,4,5]になります。 これを解決するには、次の手順に従います- ダミー:=値-infで新しいノードを作成します ダミーの次:=頭 curr=ダミー currがゼロ以外の場合、実行- next =next of curr 一方(nextはnullではなく、nextのvalはcurrのvalと同じです)、do- 次:=次の次 次のcurr:=次へ
-
C++の同じツリー
2つの二分木があるとします。それらが同じかどうかをチェックする関数を定義する必要があります。二分木は、構造的に同一であり、ノードの値が同じである場合、同じと見なされることがわかっています。 したがって、入力が[1,2,3]、[1,2,3]の場合、出力はTrueになります これを解決するには、次の手順に従います- isSameTreeという関数を定義します。これには2つのツリーノードpとqが必要です pがNULLと同じで、qがNULLと同じである場合、- trueを返す pがNULLと同じであるか、qがNULLと同じである場合、- falseを返す
-
C++での二分木の最小の深さ
二分木があるとしましょう。その木の最小の深さを見つけなければなりません。最小の深さは、ルートノードから最も近いリーフノードまでの最短パスに沿ったノードの数です。 したがって、入力が次のような場合 その場合、出力は2になります これを解決するには、次の手順に従います- ツリーノードの配列aaを定義する aaの最後にルートを挿入します ツリーノードの別の配列akを定義します レベル:=0 ルートがnullの場合、- 0を返す aaのサイズが0に等しくない場合は、-を実行します。 配列akをクリアします (レベルを1上げます)
-
C++でのパスカルの三角形II
k≤33である非負のインデックスkがあるとすると、パスカルの三角形のk番目のインデックス行を見つける必要があります。 したがって、入力が3のような場合、出力は[1,3,3,1]になります。 これを解決するには、次の手順に従います- サイズrowIndex+1の配列パスカルを定義し、これに0を入力します 初期化r:=0の場合、r <=rowIndexの場合、更新(rを1増やします)、実行- pascal [r]:=1、prev:=1 初期化i:=1の場合、i
-
C++でのExcelシートの列タイトル
正の整数があるとします。 Excelシートに表示される対応する列タイトルを見つける必要があります。したがって、[1:A]、[2:B]、[26:Z]、[27:AA]、[28:AB]など したがって、入力が28のような場合、出力はABになります。 これを解決するには、次の手順に従います- nがゼロ以外の場合、-を実行します。 n:=n-1 res:=res + n mod 26+AのASCII n:=n / 26 配列の解像度を逆にします 解像度を返す 例 理解を深めるために、次の実装を見てみましょう- #include <bits/std
-
C++の同形文字列
2つの文字列sとtがあるとします。それらが同型であるかどうかをチェックする必要があります。 sの文字を置き換えてtを取得できる場合、2つの文字列は同型であると言われます。 文字の順序を維持しながら、出現するすべての文字を別の文字に置き換える必要があります。 2人のキャラクターが同じキャラクターにマップすることはできませんが、キャラクターはそれ自体にマップすることができます。 したがって、入力がs =egg、t =addのような場合、eはaにマップでき、gはdにマップできるため、出力はtrueになります。 これを解決するには、次の手順に従います- サイズ256の配列arrを定義し、-1
-
C++のDuplicateIIが含まれています
配列と整数kがあるとすると、配列にnums [i] =nums[j]となるような2つの異なるインデックスiとjがあるかどうかを確認する必要があります。 iとjの絶対差は最大でkです。 したがって、入力が[1,2,4,1]のようで、k =3の場合、出力はTrueになります これを解決するには、次の手順に従います- ペアの配列nnを定義します 初期化i:=0の場合、i − numsのサイズの場合、更新(iを1増やします)、do − nnの最後に{nums[i]、i}を挿入します 配列nnを並べ替える 初期化i:=1の場合、i
-
C++でキューを使用してスタックを実装する
キューを使用して1つのスタックを実装するとします。スタックに対してこれらのメソッドを定義する必要があります。 push(x)-xをスタックにプッシュします。 pop()-スタックから最上位の要素を削除して返す top()-スタックから一番上の要素を返します。 empty()-スタックが空かどうかを返します。 したがって、関数push(10)、push(20)を呼び出してから、pop()、pop()を呼び出すと、出力は20、10になります。 これを解決するには、次の手順に従います- 1つの両端キューを定義する 関数push()を定義します。これにはxが
-
C++での単語パターン
パターンと文字列strがあるとし、strが同じパターンに従うかどうかを調べます。ここで続くとは、パターン内の文字とstr内の空でない単語の間に全単射があることを意味します。 したがって、入力がpattern =cbbc、str =word pattern pattern wordのような場合、出力はTrueになります。 これを解決するには、次の手順に従います- strcin:=str 単語の配列を定義する strcinの単語ごとに 単語の最後に単語を挿入 1つのマップp2iを定義する i:=0 pat:=空の文字列 パターン内のcの場
-
C++のニムゲーム
別のプレーヤーとNimGameというゲームをプレイしているとします。石の山があり、1人のプレイヤーが交代で1〜3個の石を取り除くたびに。最後の石を取り除いた方が勝者となります。 Player1は最初のターンで石を取り除きます。どちらのプレイヤーも非常に賢く、ゲームに最適な戦略を持っています。ヒープ内の石の数を考慮して、player1がゲームに勝つことができるかどうかを判断するためのアルゴリズムを考案する必要があります。 つまり、入力が5の場合、5つの石があるため、出力はtrueになります。したがって、最初に、player1が1つの石を取る場合、2番目のプレーヤーは1〜3の石を取ることができます
-
C++での4の累乗
整数があるとします。それが4の累乗であるかどうかを確認する必要があります。 したがって、入力が16のような場合、出力はTrueになります。 これを解決するには、次の手順に従います- num <0の場合、- falseを返す num&(num-1)がゼロ以外の場合、- falseを返す (num&01010101010101010101010101010101)がゼロの場合、- falseを返す trueを返す 例 理解を深めるために、次の実装を見てみましょう- #include <bits/stdc++.h> usin
-
C++での2つの配列の共通部分
2つの配列があるとします。それらの交差点を見つける必要があります。 したがって、入力が[1,5,3,6,9]、[2,8,9,6,7]の場合、出力は[9,6]になります。 これを解決するには、次の手順に従います- 2つのマップmp1、mp2を定義します 配列解像度を定義する nums1のxの場合 (mp1 [x]を1増やします) nums2のxの場合 (mp2 [x]を1増やします) mp1のキーと値のペアxごとに cnt:=0 cnt:=xの最小値とmp2[xのキー] 0の場合、- resの最後にxのキーを挿入しま
-
C++で数値が高いか低いかを推測する
推測ゲームをプレイしているとします。このゲームの特性は次のとおりです- プレーヤー1は1からnまでの数字を選びます。 player2は、私が選んだ番号を推測する必要があります。 player2が間違った推測をするたびに、player1はplayer2に数字が大きいか小さいかを知らせます。 次のように3つの可能な結果を返す関数guess(num)を使用できます- -1-Player1の数が少ない 1 −Player1の数が多い 0 −番号が一致しています したがって、入力がn =10、pick =5の場合、出力は5になります。 これを解決するには、次の手順に従い
-
C++の違いを見つける
小文字のみで構成される2つの文字列sとtがあるとします。ここで、文字列tは、文字列sをランダムにシャッフルして生成され、ランダムなインデックスにもう1文字追加されます。 tに追加された文字を見つける必要があります。 したがって、入力が「mnopq」、「pqmnot」のような場合、出力は「t」になります。これは余分な文字です。 これを解決するには、次の手順に従います- sSum:=0、tSum:=0 初期化i:=0の場合、i
-
C++で数値を16進数に変換する
整数があるとします。 16進数に変換するアルゴリズムを考案する必要があります。負の数の場合は、2の補数法を使用します。 したがって、入力が254と-12のような場合、出力はそれぞれfeとfffffff4になります。 これを解決するには、次の手順に従います- num1が0と同じ場合、- 「0」を返す num:=num1 s:=空白の文字列 numがゼロ以外の場合は、-を実行します。 temp:=num mod 16 temp <=9の場合、- s:=s+数字としての温度 それ以外の場合 s:=s+アルファベットとしての温度
-
C++で最長の回文
小文字または大文字で構成される文字列があるとすると、それらの文字で作成できる最長の回文の長さを見つける必要があります。現在、文字列では大文字と小文字が区別されるため、ここでは「Aa」は回文とは見なされません。 したがって、入力が「abccccdd」の場合、出力は7になります。これは、構築できる最長の回文の1つが「dccaccd」であり、長さが7であるためです。 これを解決するには、次の手順に従います- 1つのマップmpを定義する sの各文字iについて (mp [i]を1増やします) ma:=0、c:=0、ans:=0 mpのキーと値のペアiごとに
-
C++での3番目の最大数
空でない整数の配列があるとします。この配列で3番目に大きい数を見つける必要があります。 3番目の最大数がない場合は、最大数を返します。課題は、線形時間計算量を使用してこれを解決する必要があることです。 したがって、入力が[5,3,8,9,1,4,6,2]の場合、出力は6になります。 これを解決するには、次の手順に従います- a、b、cをNULLで初期化します 初期化i:=0の場合、i
-
C++の文字列内のセグメント数
文字列sがあるとします。文字列内のセグメントの数をカウントする必要があります。セグメントは、連続する文字シーケンス(空白なし)として定義されます。 したがって、入力が「こんにちは、プログラミングが大好き」のような場合、4つのセグメントがあるため、出力は4になります。 これを解決するには、次の手順に従います- n:=0 初期化i:=0の場合、i
-
C++でのコインの配置
階段状に形成したいコインがn個あるとすると、k番目の行ごとに正確にk個のコインが必要です。したがって、nがある場合、形成できる完全な階段の行の総数を見つける必要があります。 したがって、入力が5の場合、出力は2になります。これは、5枚のコインを使用して2つの完全なスターケース行を作成できるため、最後の1つは3つ必要ですが、2のままにする必要があります- * ** ** これは、この式を使用して直接実行できます- $$ \ frac {\ sqrt {(8n + 1)}-1} {2} $$ 例 理解を深めるために、次の実装を見てみましょう- #include <bits/stdc+