-
C++で少なくともK個の繰り返し文字を含む最長のサブストリング
文字列sがあり、T内のすべての文字が少なくとも表示されるように、指定された文字列(小文字のみで構成される)の最長の部分文字列Tの長さを見つける必要があるとします。 k回より。したがって、文字列が「ababbc」でk =2の場合、2つのaと3つのbがあるため、出力は3になり、最長のサブ文字列は「ababb」になります。 これを解決するには、次の手順に従います- longestSubstring()という再帰関数を1つ作成します。これには、文字列sとサイズkが必要です k =1の場合、文字列のサイズを返します 文字列のサイズが
-
C++での高さによるキューの再構築
列に並んでいる人のランダムなリストがあると考えてください。各人が整数のペア(h、k)で記述されている場合、ここでhは身長、kは彼の前にいるh以上の身長を持つ人の数です。キューを再構築するための1つのメソッドを定義する必要があります。したがって、指定された配列が[[7,0]、[4,4]、[7,1]、[5,0]、[6,1]、[5,2]]の場合、出力は次のようになります。 [[5,0]、[7,0]、[5,2]、[6,1]、[4,4]、[7,1]] これを解決するには、次の手順に従います- 次の比較戦略に基づいて、指定されたアレイを並べ替えます b [1]を返します。それ以外の場合は、a [0
-
C++でのパーティションの等しいサブセット和
正の数のみを含む空でない配列があるとすると、両方のサブセットの要素の合計が同じになるように、配列を2つのサブセットに分割できるかどうかを確認する必要があります。したがって、入力が[1,5,11,5]のような場合、出力はtrueになります。この配列は[1、5、5]および[11]として分割できるため これを解決するには、次の手順に従います- n:=配列のサイズ 合計:=0 for i:=0からn– 1 sum:=sum + nums [i] 合計が奇数の場合、falseを返します 合計:=合計/ 2 サイズ合計+1のdpという1つの配列を作成します dp [0]:=true
-
C++で英語から元の数字を再構築する
0〜9の数字の順序が正しくない英語表現を含む空でない文字列があるとし、数字を昇順で出力します。いくつかのプロパティがあります- 入力は有効であることが保証されており、元の数字に変換できます。つまり、「abc」や「zerone」などの無効な入力は許可されません。 入力の長さが50,000未満です。 したがって、入力が「fviefuro」のような場合、出力は45になります。 これを解決するには、次の手順に従います- nums:=0から9までの英語の文字の数字を保持している配列。 サイズ10の配列を1つカウントします ans:=空の文字列。およびn:=文字列のサイズ。 0からn– 1の
-
C++での最長の繰り返し文字置換
大文字のみで構成される文字列sを指定したとすると、その文字列に対して最大k個の操作を実行できます。 1つの操作で、文字列の任意の文字を選択し、それを他の大文字に変更できます。上記の操作を実行した後に取得できるすべての繰り返し文字を含む最長のサブ文字列の長さを見つける必要があります。したがって、入力が「ABAB」でk =2の場合、出力は4になります。これは、2つの「A」と2つの「B」またはその逆であるためです。 これを解決するには、次の手順に従います- maxCount:=0、ans:=0およびn:=文字列のサイズs サイズ26の配列cntを作成し、j:=0 for i:=0からn–
-
C++で配列内のすべての重複を検索
1≤a[i]≤n(n =配列のサイズ)の範囲の整数の配列があるとします。ここでは、一部の要素が2回表示され、他の要素が1回表示されます。この配列に2回現れるすべての要素を見つける必要があります。したがって、配列が[4,3,2,7,8,2,3,1]の場合、出力は[2、3]になります。 これを解決するには、次の手順に従います- n:=配列のサイズ、ansと呼ばれる1つの配列を作成します 0からn–1の範囲のiの場合 x:=nums [i]の絶対値 xを1減らします nums [x] <0の場合は、x + 1をansに追加します。それ以外の場合は、nums [x]:=nums [x] *(
-
C++で頻度で文字を並べ替える
文字列があるとすると、頻度に基づいて文字を並べ替える必要があります。したがって、文字列が「abbbacbcc」のような場合、出力は「bbbbcccaa」になります これを解決するには、次の手順に従います- vというペアの配列を作成し、1つのマップmを作成します 文字列内のすべての文字について、 m[文字]の値を1増やします i:=マップの最初の要素 マップには要素があります (i.second、i.first)をvに挿入します 次の要素を指すようにiを増やします ベクトルvを並べ替える ans:=空の文字列 for i:=0からvのサイズ t:=v[i]の最初の要素 tが
-
C++でのターゲット合計
非負の整数a1、a2、...、an、およびターゲットSという別の値のリストがあるとします。これで2つの記号+と-があります。 。整数ごとに、新しい記号として+と-から1つを選択する必要があります。整数の合計をターゲット値Sと同じにするためにシンボルを割り当てる方法がいくつあるかを調べる必要があります。したがって、数値が[1,1,1,1,1]で、S =3の場合、出力は次のようになります。 5、組み合わせは– 1 + 1 + 1 + 1 + 1 =3、+ 1 – 1 + 1 + 1 + 1 =3、+ 1 + 1 – 1 + 1 + 1 =3、+ 1 + 1 + 1 – 1 + 1 =3、+ 1 +
-
C++の次のGreaterElementII
循環配列があるとすると(最後の要素の次の要素は配列の最初の要素です)、すべての要素の次の大きい数値を表示する必要があります。ここで、数値xの次の大きい数は、配列内の次のトラバース順序の最初の大きい数です。これは、循環して次の大きい数を見つけることができることを意味します。存在しない場合は-1になります。したがって、数値が[1、2、1、3、2、1]の場合、出力は[2,3,3、-1,3,2]になります。 これを解決するには、次の手順に従います- n:=配列のサイズ サイズnのresと呼ばれる1つの配列を定義し、これを-1で埋めて、1つのスタックstを定義します 0〜2nの範囲のiの場合
-
C++でのコインチェンジ2
異なる金種のコインと合計金額があるとします。その量を構成する組み合わせの数を計算するモジュールを作成する必要があります。コインの種類ごとに無限の数があると想定できます。したがって、金額が5で、コインが[1、2、5]の場合、4つの組み合わせがあります。 (1 + 1 + 1 + 1 + 1)、(1 + 1 + 1 + 2)、(1 + 2 + 2)、(5) これを解決するには、次の手順に従います- サイズ量+1の配列dpを1つ作成します dp [0]:=1 n:=コイン配列のサイズ 0からn–1の範囲のiの場合 範囲コインのjの場合[i]から金額まで dp [j]:=dp [j –コイ
-
C++でソートされた配列の単一要素
整数のみで構成されるソートされた配列があり、1つの要素が1回だけ表示される場合を除いて、すべての要素が2回だけ表示されるとします。一度だけ現れるこの単一の要素を見つける必要があります。したがって、配列が[1、1、2、3、3、4、4、8、8]の場合、出力は2になります。 これを解決するには、次の手順に従います- ans:=0 0からnumsの配列サイズの範囲のiの場合 ans:=ans XOR nums [i] 回答を返す 例(C ++) 理解を深めるために、次の実装を見てみましょう- #include <bits/stdc++.h> using namespace
-
サブアレイの合計はC++でKに等しい
整数の配列と整数kがあるとすると、合計がkと同じ連続サブ配列の総数を見つける必要があります。したがって、nums配列が[1、1、1]で、kが2の場合、出力は2になります。 これを解決するには、次の手順に従います- sums、temp:=0、sums [0]:=1、ans:=0という1つのマップを定義します 0から配列のサイズまでの範囲のiの場合 temp:=temp + n [i] 合計にk– tempがある場合、 ans:=ans + sums [k --temp] sums[-temp]の値を1増やします 回答を返す 例(C ++) 理解を深めるために、次の実装を見
-
C++での文字列の順列
2つの文字列s1とs2があるとすると、s2にs1の順列が含まれている場合にtrueを返す関数を作成する必要があります。したがって、最初の文字列の順列の1つは、2番目の文字列の部分文字列であると言えます。したがって、文字列s1 =“ abc”で、2番目の文字列s2が“ findcab”の場合、“ abc”の順列が真であるため、結果は真になります。それが「タクシー」です。 これを解決するには、次の手順に従います- サイズ26の2つのベクトルcnt1とcnt2を作成します 0からs1の範囲のiの場合 cnt1 [s1 [i] –‘a’]の値を1増やします j:=0および必須:=s1のサイ
-
C++での2つの文字列の削除操作
w1とw2の2つの単語があるとすると、w1とw2を同じにするために必要な最小ステップ数を見つける必要があります。各ステップで、いずれかの文字列の1文字を削除できます。 。したがって、入力が「sea」や「eat」の場合、出力は2になります。これは、w1から「s」を削除する必要があるためです。これは「ea」になり、w2の「eat」から「t」を削除します。それならそれらは同じです。 これを解決するために、次の手順に従います n:=s1のサイズ、m:=s2のサイズ 文字列s1とs2の前に1つの空白スペースを追加し、それに応じてs1とs2を更新します サイズ(n + 1)x(m + 1)のテーブル
-
C++でK個の最も近い要素を検索する
並べ替えられた配列があり、2つの整数kとxも指定されているとすると、その配列内でxに最も近いk個の要素を見つける必要があります。結果は昇順で並べ替える必要があります。同点の場合は、常に小さい要素が優先されます。したがって、入力が[1,2,3,4,5]のようで、k =4、x =3の場合、出力は[1,2,3,4]になります。 これを解決するには、次の手順に従います- ansという配列を作成します 低設定:=0、高:=配列のサイズ– k 低い<高い 中:=低+(高-低)/ 2 arr [mid + k] – xの場合、low:=mid + 1、それ以外の場合はhigh:=mid 低か
-
C++で最も長く増加するサブシーケンスの数
ソートされていない整数の配列が1つあるとします。最長増加部分列の数を見つける必要があるため、入力が[1、3、5、4、7]の場合、増加部分列は[1,3,5,7]であり、出力は2になります。 [1、3、4、7] これを解決するには、次の手順に従います- n:=num配列のサイズ、サイズnの2つの配列lenとcntを作成し、それらに値1を入力します。 lis:=1 1からnの範囲のiの場合 0からi–1の範囲のjの場合 nums [j]の場合、 len [i]の場合、len [i]:=len [j] + 1、およびcnt [i]:=cnt [j] それ以外の場合、len [j] +
-
C++のトップKのよくある単語
空でない単語のリストがあるとします。 k個の最も頻繁な要素を見つける必要があります。私たちの答えは、頻度の高いものから低いものへと並べ替える必要があります。 2つの単語の頻度が同じ場合、アルファベットの低い単語が最初に配置されます。したがって、配列が[the、sky、is、blue、the、weather、is、comfortable]のようである場合、最も頻繁に使用される単語は[is、 the、 blue] これを解決するには、次の手順に従います- mと呼ばれる1つのマップを定義します 優先キューを1つ作成するv for i:=0 to n、ここでnは単語配列のサイズであり、m[wo
-
C++でのK個の等和サブセットへの分割
numsと呼ばれる整数の配列と正の整数kがあるとします。この配列を、合計がすべて同じであるk個の空でないサブセットに分割できるかどうかを確認します。したがって、配列が[4,3,2,3,5,2,1]のようで、k =4の場合、指定された配列は[[5]、[ 1,4]、[2,3]、[2,3]]の合計は等しい。 これを解決するには、次の手順に従います- dpと呼ばれる2つのテーブルと合計サイズ2^nを定義します。 指定された配列numsを並べ替え、sum:=nums配列内のすべての要素の合計を設定します sum/ kの場合、falseを返します set dp [0]:=true and sum:=
-
C++のバイナリ検索ツリーに挿入します
二分探索木があるとします。パラメータとして指定されたノードを使用して挿入操作を実行するメソッドを1つだけ作成する必要があります。手術後も木はBSTのままであることに注意する必要があります。したがって、ツリーが次のような場合- 5を挿入すると、ツリーは-になります。 これを解決するには、次の手順に従います- このメソッドは再帰的です。これはinsert()と呼ばれ、値vを取ります。 rootがnullの場合、指定された値vでノードを作成し、それをrootにします vの場合、 ルートの左側:=insert(ルートの左側、v) ルートの右:=insert(ルートの右、v) ル
-
C++での2つの文字列の最小ASCII削除合計
2つの単語w1とw2があるとすると、w1とw2を同じにするために、削除された文字の最小のASCII合計を見つける必要があります。各ステップで、どちらかで1つの文字を削除できます。ストリング。したがって、入力が「sea」や「eat」の場合、出力は231になります。これは、w1から「s」を削除する必要があるためです。これは「ea」になり、w2の「eat」から「t」を削除します。その後、それらは同じです。 「eat」から「t」を削除すると、合計に116が追加され、最後に両方の文字列が同じになり、115 + 116=231がこれを達成するために可能な最小の合計になります。 これを解決するには、次の手