-
C++での水と水差しの問題
容量がxリットルとyリットルの水差しが2つあるとします。私たちが利用できる水の供給は無限です。次に、これら2つの水差しを使用して正確にzリットルを測定できるかどうかを判断する必要があります。 zリットルの水が測定可能である場合、最後までに一方または両方のバケツにzリットルの水が含まれている必要があります。 これらのいくつかの操作を実行できます- 水差しのいずれかを水で完全に満たします。 水差しのいずれかを空にします。 もう一方の水差しが完全にいっぱいになるか、最初の水差し自体が空になるまで、一方の水差しから別の水差しに水を注ぎます。 したがって、x=2およびy=5、お
-
C++で最大の分割可能なサブセット
明確な正の整数のセットがあるとすると、このサブセット内の要素の(Si、Sj)のようなすべてのペアがSi mod Sj=0またはSjmodSi=0を満たすような最大のサブセットを見つける必要があります。 したがって、入力が[1,2,3]のような場合、可能な結果は[1,2]または[1,3]のようになります。 これを解決するには、次の手順に従います- 配列retを作成し、endpoint:=0、retLen:=1、n:=numsのサイズを設定します nが0の場合、空のセットを返します nums配列を並べ替える サイズnの2つの配列lenとparを作成し、lenを1で初期化
-
C++のスーパーパウ
a ^ b mod 1337を計算する必要があるとします。ここで、aは1つの正の整数であり、bは配列の形式で与えられる非常に大きな正の整数です。したがって、a=2およびb=[1,0]の場合、出力は1024になります。 これを解決するには、次の手順に従います- これがベースとパワーを取るpowerMod()メソッドを定義します m:=1337、ret:=1 電力が0でない間 電力が奇数の場合、ret:=ret * base mod m base:=base ^ 2 mod m パワー:=パワー/ 2 retを返す superPower
-
C++でサブシーケンスをウィグルする
連続する数の差が正と負の間で厳密に交互になる場合、ウィグルシーケンスと呼ばれる数列があるとします。最初の違いは、正または負のいずれかです。要素が2つ未満のシーケンスは、自明なウィグルシーケンスです。したがって、たとえば、[1,7,4,9,2,5]は小刻みに動くシーケンスです。これは、表示されている場合、差(6、-3,5、-7,3)が交互に正と負であるためです。ただし、[1,4,7,2,5]と[1,7,4,5,5]はウィグルシーケンスではありません。最初のシーケンスは、最初の2つの差が正であるため、2番目のシーケンスは最後の差がゼロであるためです。 。 したがって、整数のシーケンスがあり、ウィ
-
C++のリンクリストランダムノード
単一のリンクリストがあるとすると、リンクリストからランダムなノードの値を見つける必要があります。ここで、各ノードは同じ確率で選択される必要があります。したがって、たとえば、リストが[1,2,3]の場合、範囲1、2、および3のランダムノードを返すことができます。 これを解決するには、次の手順に従います- getRandom()メソッドで、次のようにします- ret:=-1、len:=1、v:=x vがnullではない場合 rand()がlenで割り切れる場合、ret:=val of v lenを1増やします v:=次のv retを返す 例
-
C++でのエリミネーションゲーム
1からnまでのソートされた整数のリストがあるとします。それは左から始まり右で終わります。リストの最後に到達するまで、最初の番号とその後のすべての番号を削除する必要があります。前の手順をもう一度繰り返しますが、今回は右から左に、残りの番号から右端の番号と1つおきの番号を削除します。 1つの数字が残るまで、左から右、右から左に交互に手順を繰り返します。長さnのリストで始まる最後の番号を見つける必要があります。 したがって、入力がn =9の場合、手順は次のようになります- 1 、2、 3 、4、 5 、6、 7 、8、 9 2、 4 、6、 8 2 、6
-
C++でのUTF-8検証
データを表す整数のリストがあるとします。有効なUTF-8エンコーディングであるかどうかを確認する必要があります。 1つのUTF-8文字の長さは1〜4バイトです。いくつかのプロパティがあります- 1バイト文字の場合、最初のビットは0で、その後にUnicodeコードが続きます。 nバイト文字の場合、最初のnビットはすべて1で、n + 1ビットは0で、その後にn-1バイトが続き、最上位2ビットは10です。 したがって、エンコード手法は次のようになります- 文字番号の範囲 UTF-8オクテットシーケンス 0000 0000 0000 007F 0xxxxxxx
-
C++での回転関数
整数Aの配列を指定し、nを配列Aの長さとします。ここで、Bkを、配列A、kの位置を時計回りに回転させて得られる配列と仮定します。ここで、回転は次のように定義できます- F(k)=0 * Bk [0] + 1 * Bk [1] + ... +(n-1)*Bk[n-1]。 ここで、F(0)、F(1)、...、F(n-1)の最大値を見つけます。 したがって、入力がA =[4,3,2,6]の場合、- F(0)=(0 * 4)+(1 * 3)+(2 * 2)+(3 * 6)=0 + 3 + 4 + 18 =25 F(1)=(0 * 6)+(1 * 4)+(2 * 3)+(3
-
C++での整数置換
正の整数nがあり、次のようにこれらの操作を実行できるとします- nが偶数の場合は、nをn/2に置き換えます。 nが奇数の場合、nをn+1またはn-1に置き換えることができます。 nが1になるために必要な置換の最小数を見つける必要がありますか? したがって、数字が7の場合、答えは4になります。7→8→4→2→1または7→6→3→2→1 これを解決するには、次の手順に従います- ret:=0、n:=x 1 nが偶数の場合、c:=n / 2 それ以外の場合、nが偶数の場合 nが3またはn/2が偶数の場合、nを1減らし、それ以外の場合はnを1
-
C++でのランダムピックインデックス
重複の可能性がある整数の配列があるとすると、指定されたターゲット番号のインデックスをランダムに選択する必要があります。指定されたターゲット番号が配列に存在する必要があると想定できます。したがって、配列が[1,2,3,3,3]のような場合、pick(3)は2、3、4をランダムに返す可能性があります。 これを解決するには、次の手順に従います- ret:=-1、cnt:=1 0からvのサイズまでの範囲のiの場合 v [i] =ターゲットの場合、 乱数modcnt=0の場合、ret =i cnt:=cnt + 1 retを返す 例(C ++)
-
C++の配列内の2つの数値の最大XOR
空でない数値の配列a0、a1、a2、…、an-1があるとします。ここで、0≤ai<231です。aiの最大の結果を見つける必要があります。 XOR aj、ここで0≤i、j
-
C++で2つの数値IIを追加する
2つの非負の整数を表す2つの空でないリンクリストがあるとします。ここでは、最上位桁が最初に来て、それらの各ノードに1桁が含まれています。 2つの数値を追加して、リンクリストとして返す必要があります。したがって、リストが[7、2、4、3] + [5、6、4]の場合、結果は[7、8、0、7]になります。 これを解決するには、次の手順に従います- ダミーと呼ばれるノードを作成し、値0を格納し、スタックs1とs2を作成します。 s1をl1のノードで埋め、s2をs2のノードで埋めます。 合計:=0 s1が空でないかs2が空でない間 s1が空の場合、sum:=sum +
-
C++での関数の排他時間
シングルスレッドCPUで、いくつかの関数を実行するとします。これで、各関数のIDは0からN-1の間で一意になります。関数がいつ開始または終了したかを説明するタイムスタンプ順にログを保存します。 ここで、各ログは次の形式で記述された文字列です: {function_id}:{start | end }:{timestamp}。たとえば、文字列が「0:start:3」の場合、これはID 0の関数がタイムスタンプ3の開始時に開始されたことを意味します。「1:end:2」はID1の関数がタイムスタンプの終了時に終了したことを意味します。 2.関数の排他時間は、この関数で費やされた時間の単位数です。
-
C++でのショッピングオファー
店舗があるとすると、販売するアイテムがいくつかあります。各アイテムにはいくつかの価格があります。ただし、いくつかの特別オファーがあり、特別オファーは、セール価格の1つまたは複数の異なる種類のアイテムで構成されます。つまり、価格のリスト、一連の特別オファー、および各アイテムに対して購入する必要のある数があります。タスクは、特別オファーを最適に利用できる、与えられた特定のアイテムに支払う必要のある最低価格を見つけることです。 ここで、各特別オファーは配列の形式で表され、最後の数字はこの特別オファーに支払う必要のある価格を表し、他の数字はこのオファーを購入した場合に取得できる特定のアイテムの数を表
-
C++でのペアチェーンの最大長
Dota2の世界で、ラディアントとダイアの2つのパーティがあるとします。 Dota2上院議員は、2つの政党から来た上院議員で構成されています。今、上院はDota2ゲーム内でいくつかの変更を選択したいと考えています。この変更への投票は、ラウンドベースの手順である可能性があります。各ラウンドで、各上院議員は2つの権利のうちの1つを行使できます- 1人の上院議員の権利を禁止する-上院議員は、このラウンドとその後のラウンドで、別の上院議員にすべての権利を失う可能性があります。 勝利を発表する-この上院議員が、まだ投票権を持っている上院議員がすべて同等の政党から来ていることを発見した場合、彼
-
C++での小惑星の衝突
小惑星を連続して表す整数の小惑星の配列があるとします。ここで、各小惑星について、絶対値はそのサイズを表し、符号はその方向を表し、それぞれ右と左で正または負になります。各小惑星は同じ速度で移動します。 すべての衝突の後、小惑星の状態を見つける必要があります。 2つの小惑星が出会うと、小さい方の小惑星が爆発します。両方が同じサイズの場合、両方が爆発します。同じ方向に移動する2つの小惑星が出会うことはありません。 したがって、入力が[5、10、-5]の場合、出力は[5、10]になります。ここでは、10と-5が10で衝突し、5と10が衝突することはありません。 これを解決するには、次の手順に従い
-
C++で削除して獲得する
整数の配列numsがあるとすると、配列に対していくつかの操作を実行できます。ここでは、各操作で、任意のnums [i]を選択して削除し、nums[i]のポイントを獲得します。 nums[i]-1またはnums[i]+1に等しいすべての要素を削除する必要があります。最初はポイントは0です。このような操作を適用して獲得できるポイントの最大数を見つける必要があります。したがって、入力が[3,4,2]の場合、出力は6になります。これは、4を削除すると、4ポイントが得られ、結果として3も削除されるためです。次に、2を削除して2ポイントを獲得します。合計6ポイントを獲得できます。 これを解決するには、次
-
C++でのDominoとTrominoのタイリング
ドミノとトロミノの2種類の形状があるとします。以下のように回転させることができます- タイリングでは、すべての正方形をタイルで覆う必要があります。ここで、2つのタイルは、ボード上に2つの4方向に隣接するセルがあり、タイルの1つだけが両方の正方形をタイルで占めている場合にのみ異なります。 Nが与えられた場合、2xNボードをタイリングできる方法をいくつ見つける必要がありますか?したがって、入力が3の場合、出力は5になります。したがって、配置は[XYZ XXZ XYYXXYXYY]と[XYZYYZXZZ XYY XXY]になります。ここでは、タイルごとに異なる文字が使用されます。 これを
-
C++でのカスタムソート文字列
SとTの2つの文字列があり、これらは小文字で構成されているとします。 Sでは、文字が2回以上出現することはありません。 Sは、以前はカスタム順序で並べ替えられていました。 Sが並べ替えられた順序と一致するように、Tの文字を並べ替える必要があります。より具体的には、Sでxがyの前に発生する場合、返される文字列ではxがyの前に発生します。 したがって、S =“ cba”およびT =“ abcd”の場合、出力は“ cbad”になります。ここで、Sには「a」、「b」、「c」が表示されるため、「a」、「b」、「c」の順序は「c」、「b」、「a」の順になります。 「d」はSに表示されないため、Tの任意の
-
C++で最大値が制限されているサブアレイの数
正の整数の配列Aがあり、2つの正の整数LとRも指定されているとします。 (連続した、空でない)サブ配列の数を見つけて、そのサブ配列の最大配列要素の値が少なくともL、最大でRになるようにする必要があります。したがって、A =[2,1,4,3]であり、 L=2およびR=3の場合、要件を満たすサブアレイが3つあるため、出力は3になります。つまり、これらは[2]、[2,1]、[3]です。 これを解決するには、次の手順に従います- ret:=0、dp:=0、prev:=-1 0からA–1のサイズまでの範囲のiの場合 A [i]0の場合、ret:=ret + dp Rの場合、