-
C++のK逆ペア配列
2つの整数nとkがあるとすると、正確にk個の逆数のペアが存在するように、1からnまでの数で構成される異なる配列の数を見つける必要があります。逆ペアは、配列のi番目とj番目の要素用であり、i a [j]の場合、逆ペアと呼ばれます。ここで、答えは非常に大きくなる可能性があります。答えは$ 10 ^ {9} $+7を法とする必要があります。 したがって、入力がn=3およびk=1の場合、配列[1,3,2]および[2,1,3]には1つの逆ペアしかないため、出力は2になります。 これを解決するには、次の手順に従います- サイズ(n + 1)x(k + 1)の2D配列dpを1つ定義します dp [0
-
C++のKリストからの最小範囲カバー要素
ソートされた整数のリストがk個あるとします。 k個のリストのそれぞれから少なくとも1つの数字を含む最小の範囲を検索する必要があります。ここで、範囲[a、b]は、b-a
-
WaysIIをC++でデコードする
次のマッピング方法を使用して、A〜Zの文字が数字にエンコードされているというメッセージがあるとします- 26 これで、エンコードされた文字列に文字「*」を含めることもできます。これは、1〜9の数字の1つとして扱うことができます。したがって、数字と文字「*」を含むエンコードされたメッセージがある場合は、それをデコードする方法の総数。答えが非常に長い場合は、mod 109+7を使用して最終結果を得ることができます。したがって、入力が*のみの場合、9つの方法が考えられます。これらはすべて、1から9までの数字なので、AからIです。 これを解決するには、次の手順に従います- 関数add()を定
-
C++の奇妙なプリンター
奇妙なプリンターがあるとしましょうそれはいくつかの要件があります- プリンタは、毎回同じ文字のシーケンスのみを印刷できます。 各ターンで、プリンタは任意の場所で開始および終了する新しい文字を印刷でき、元の既存の文字をカバーします。 したがって、文字列が小文字で構成されている場合、私たちのタスクは、それを印刷するためにプリンターが必要とする最小回転数をカウントすることです。 したがって、入力が「aaabba」のような場合は、2ターンかかります。最初に、文字を置き換えてaaaaaを出力し、次にbを出力します。 これを解決するには、次の手順に従います- n:=sのサイズ nが0と同じ
-
C++の掛け算の九九でK番目に小さい数
1つの掛け算の九九について知っていると仮定します。しかし、九九からk番目に小さい数をすばやく見つけることができますか?したがって、高さm、長さnのa m * n掛け算の九九、および1つの正の整数kが必要な場合、この表でk番目に小さい数を見つける必要があります。 したがって、m=3およびn=3でkが6の場合、出力は4になります。これは、掛け算の九九が-のようなものであるためです。 1 2 3 1 1 2 3 2 2 4 6 3 3 6 9 6番目に小さい要素は[1,2,2,3,3,4,6,6,9]として
-
24C++でのゲーム
カードが4枚あるとします。これらのカードは1から9までの数字を保持しています。24を取得するには、+、-、*、/などの演算子を使用して操作できるかどうかを確認する必要があります。したがって、[4,9,2,6 ]、次に(4 * 9)–(2 * 6)で24を得ることができ、答えは真になります。 これを解決するには、次の手順に従います- イプシロン:=10.0 ^ -5 関数solve()を定義します。これには、配列vが必要です。 vのサイズが1と同じ場合、- | v[0]-24.0|の場合にtrueを返します<=イプシロン iを初期化する場合:=0、i
-
C++での冗長接続II
根付いた木があるとします。これは、他のすべてのノードがこのノードの子孫であるノード(ルート)が1つだけ存在し、ルートノードを除くすべてのノードが親を1つだけ持つような有向グラフです。ルートには親がいません。 与えられた入力で、N個のノード(すべての値は一意)を持つルートツリーとして開始され、1つの有向エッジが追加された有向グラフ。追加されたエッジには、1からNまで選択された2つの異なる頂点があり、既存のエッジではありませんでした。 グラフはエッジの2D配列になります。エッジの各要素は、ノードuとvを接続する有向エッジを表す[u、v]のようなペアです。ここで、uは子vの親です。 結果のグラ
-
C++での3つの重複しないサブ配列の最大合計
正の整数のnumsと呼ばれる1つの配列があるとすると、合計が最大の3つの重複しないサブ配列を見つける必要があります。ここでは、各サブ配列のサイズはkであり、すべての3*kエントリの合計を最大化する必要があります。 結果は、各区間の開始位置を表すインデックスのリストとして見つける必要があります。複数の回答がある場合は、辞書式順序で最小のものを返します。 したがって、入力が[1,2,1,2,6,8,4,1]のようで、k =2の場合、結果は[0,3,5]になるため、サブ配列は[1,2]、 [2,6]、[8,4]は開始インデックス[0,3,5]に対応します。 これを解決するには、次の手順に従いま
-
C++で単語を綴るステッカー
N種類のステッカーがあるとします。各タイプのステッカーには、小文字の英語の単語が付いています。ステッカーのコレクションから個々の文字を切り取り、それらを再配置することによって、指定されたターゲット文字列を綴りたいと思います。必要に応じて各ステッカーを複数回使用でき、各ステッカーの数量は無限です。 ターゲットを綴るのに必要なステッカーの最小数を見つける必要がありますか?タスクが不可能な場合は、-1を返します。 したがって、入力が[dog、 sentence、 antenna]のようで、ターゲットが danceの場合、答えは3になります これを解決するには、次の手順に従います- n:=タ
-
C++のブラックリストを使用したランダムピック
Bというブラックリストがあるとします。これは範囲[0、N)から一意の整数を保持しているため、範囲[0、N)からBにない均一なランダム整数を返す関数を定義する必要があります。 random()を減らすことにより、この関数をより最適化します。関数呼び出し。入力配列が次のようであると仮定します これを解決するには、次の手順に従います- 1つのマップを定義する Nと配列vで初期化します。 iを初期化する場合:=0、i
-
C++の範囲モジュール
範囲モジュールが必要だとします。これは、数値の範囲を追跡するモジュールです。私たちの仕事は、次のインターフェースを効率的に設計および実装することです。 addRange(左、右)。これにより、ハーフオープン間隔[左、右)が作成され、その間隔内のすべての実数が追跡されます。現在、現在追跡されている番号と部分的に重複する間隔を追加すると、まだ追跡されていない番号が間隔に追加されるはずです。 queryRange(left、right)。これは、間隔[左、右)のすべての実数が現在追跡されているときにtrueを返します。 removeRange(left、right)、これにより、間隔[lef
-
C++でK番目に小さいペア距離を見つける
整数配列があるとします。すべてのペアの中でk番目に小さい距離を見つける必要があります。ペア(A、B)の距離は、実際にはAとBの絶対差です。したがって、入力が[1,3,8]の場合、可能なすべてのペアは[1,3]、[3、8]です。 、[1、8]、k =2の場合、2番目に小さい距離は5(8-3)です。 これを解決するには、次の手順に従います- n:=numsのサイズ、x:=0 iを初期化する場合:=0、i
-
C++でのチェリーピックアップ
N x Nグリッドが1つあるとすると、これはさくらんぼでいっぱいです。各セルには、次のように可能な整数の1つがあります- 0-セルが空であるため、通過できることを示します 1-セルにチェリーが含まれていることを示します。これを拾い上げて通過させることができます -1-セルに道を塞ぐとげが含まれていることを示します これらのいくつかのルールを使用して、最大数のサクランボを収集する必要があります- 位置(0、0)から開始し、有効なパスセルを右または下に移動して(N-1、N-1)で終了します セル(N-1、N-1)に到達した後、有効なパスセルを左または上に移動して(0、0)に戻ります。 チ
-
C++で金庫を割る
パスワードで保護されているボックスがあるとします。パスワードはn桁のシーケンスであり、各桁は最初のk桁の0、1、...、k-1のいずれかになります。そのため、パスワードを入力するときに、入力された最後のn桁が自動的に正しいパスワードと照合されます。 したがって、たとえば、正しいパスワードが「563」であると仮定して、「285639」を入力すると、正しいパスワードが入力されたパスワードのサフィックスと一致するため、ボックスが開きます。入力した時点でボックスを開くことが保証されている最小の長さのパスワードを見つける必要があります。 入力がn=2およびk=2の場合、結果は「01100」、「001
-
C++で上昇する水で泳ぐ
1つのNxNグリッドがあり、各正方形グリッド[i] [j]はそのポイント(i、j)での標高を表しているとします。雨が降り始めたと考えてください。時間tでは、あらゆる場所の水深はtです。両方の正方形の高度が最大でtの場合、正方形から別の4方向に隣接する正方形に泳ぐことができます。ゼロ時間で無限の距離を泳ぐことができます。 位置(0、0)から開始する必要があります。右下の正方形(N-1、N-1)に到達するまでの最短時間を見つける必要があります したがって、入力が次のような場合 0 1 2 3 4 24 23 22 21 5 12 13
-
C++でポイントに到達する
開始点(sx、sy)と目標点(tx、ty)があるとすると、開始点から終了点までの一連の移動が存在するかどうかを確認する必要があります。ここでの移動は、点(x、y)を取得し、それを(x、x + y)または(x + y、y)に変換することで構成されます。 したがって、入力が(1、1)と(4,5)の場合、答えは真になります。これは、(1,1)を(2,1)、次に(3,1)、次に(4)に移動するためです。 、1)、次に(4,5)。 これを解決するには、次の手順に従います- syの場合、-を実行します。 tyの場合、- tx:=tx mod ty それ以外の場合 ty:=ty mod t
-
C++でチェス盤に変換する
1つのNxNボードに0と1のみが含まれているとします。これで、各移動で、任意の2行または任意の2列を入れ替えることができます。ボードを「チェス盤」に変えるための最小移動回数を見つける必要があります。ソリューションが存在しない場合は、-1を返します。 したがって、入力が-のような場合 最初の動きの最初の2列として、出力は2になり、ボードは-のようになります。
-
C++でK番目に小さい素数の分数
ソートされたリストが1つあり、1つといくつかの素数があるとします。ここで、リスト内のすべてのp
-
C++での階乗ゼロ関数のプリイメージサイズ
関数f(x)があるとすると、これはxの階乗の終わりにあるゼロの数を返します。したがって、f(3)=0の場合、3! =6の最後にはゼロがありませんが、f(11)=2であるため、11! =39916800の最後に2つのゼロがあります。ここで、Kがある場合、f(x)=Kというプロパティを持つ非負の整数xがいくつあるかを見つける必要があります。 したがって、入力がK =2のような場合、答えは5になります。 これを解決するには、次の手順に従います- 関数ok()を定義します。これにはxが必要です。 ret:=0 i:=5を初期化する場合、i <=xの場合、i:=i * 5を更新し、-を実行し
-
C++で最高のスコアを持つ最小のローテーション
配列Aがあるとすると、配列がA [K]、A [K + 1]、A {K + 2]、... A [A.length-1]になるように、Kだけ回転させることができます。 A [0]、A [1]、...、A[K-1]。次に、インデックス以下のエントリは1ポイントの価値があります。 1 [ポイントなし]、0 <=2 [1ポイント獲得]、2 <=3 [1ポイント獲得]、4 <=4[ポイント獲得ワンポイント]。 Kを見つける必要があります。Kを見つけると、最高のスコアが得られます。複数の回答がある場合は、そのような最小のインデックスKを返します。したがって、入力がK =2の場合、回答は5になります。