-
C++での範囲合計のカウント
整数の配列numsがあるとすると、範囲[下限、上限]の両方を含む範囲の合計の数を見つける必要があります。範囲の合計S(i、j)は、インデックスiからインデックスjまでのnumsの要素の合計として定義されます。ここでi≤jです。 したがって、入力が[-3,6、-1]、lower =-2、upper =2の場合、範囲は[0,2]、合計は2、[2、 2]、合計は-2です。 これを解決するには、次の手順に従います- 関数mergeIt()を定義します。これは、配列プレフィックス、start、mid、end、lower、upper、を取ります。 i:=start、j:=mid + 1 tem
-
C++でのロシアの人形の封筒
いくつかのエンベロープがあると仮定します。これらのエンベロープには、高さと幅の値がペアで含まれています。 2番目のエンベロープの高さと幅の両方が最初のエンベロープの高さと幅よりも小さい場合は、1つのエンベロープを別のエンベロープに入れることができます。それで、私たちが他の中に入れることができるエンベロープの最大数は何でしょう。したがって、入力が[[5,5]、[6,4]、[6,8]、[2,3]]の場合、最小のエンベロープは[2,3]であるため、出力は3になります。次に[5,5]、次に[6,8]。 これを解決するには、次の手順に従います- 高さに基づいて配列vを並べ替えます。高さが同じ場合は、
-
C++でKより大きくない長方形の最大合計
2D行列と整数kがあるとします。合計がkを超えないように、行列内の長方形の最大合計を見つける必要があります。したがって、入力が-のような場合 1 0 1 0 -3 2 また、k =3の場合、マークされた長方形の合計は3であるため、出力は3になります。 これを解決するには、次の手順に従います- 関数maxSumSubmatrix()を定義します。これには、1つの2D配列行列とkが必要です。 n:=行番号、m:=列番号 ans:=-inf 初期化l:=0の場合、l
-
挿入削除GetRandomO(1)-C++で許可される複製
一部の操作をサポートするデータ構造を作成したいとします。これらの操作は、O(1)時間で実行する必要があります。したがって、これらの操作を-のようにします。 insert(x):コレクションにxを挿入します remove(x):コレクションからxを削除します getRandom():これにより、そのコレクションからランダムな要素が検索されます。 これを解決するには、次の手順に従います- 配列番号を作成します 1つのマップを作成するm 関数insert()を定義します。これにはvalが必要です。 ret:=valがmにない場合 m[val]の最後にnumsのサイズを挿入します nu
-
C++でのカエルジャンプ
川を渡っているカエルがいるとしましょう。川はxユニットに分割され、各ユニットに石がある場合があります。カエルは石の上でジャンプできますが、水ではジャンプできません。ここに、昇順で並べ替えられた石の位置のリストがあります。カエルが最後の石に着陸して川を渡ることができるかどうかを確認する必要があります。最初、カエルは最初の石の上にあり、最初のジャンプは1ユニットでなければならないと想定しています。 カエルの現在のジャンプがkユニットの場合、次のジャンプはk -1、k、またはk+1ユニットのいずれかである必要があります。そして、カエルは前方にしかジャンプできません。 したがって、与えられた配列が
-
C++で配列の最大合計を分割
正の整数の配列と1つの値mがあるとします。この配列をm個の連続するサブ配列に分割できます。これらのm個のサブアレイの中で最大の合計を最小化するアルゴリズムを考案する必要があります。 したがって、配列が[7,2,4,10,9]であり、m =2の場合、[7,2,4]と[10,9]のような2つのサブ配列を作成できるため、合計は19になります。 、合計が最大のサブ配列は19です。 これを解決するには、次の手順に従います- 関数splitArray()を定義します。これには、配列v、mが必要です。 n:=vのサイズ サイズの1つの配列dpを作成します サイズnの別の配列の合計を作成します su
-
C++の辞書式順序でK番目に小さい
2つの値nとkがあるとします。辞書式順序で1からnの範囲でk番目に小さい整数を見つける必要があります。したがって、入力がn=14およびk=3の場合、シーケンスは[1、10、11、12、13、14、2、3、4、5、6、7になるため、出力は11になります。 、8、9]の場合、k番目の数値は11です。 これを解決するには、次の手順に従います- 関数findKthNumber()を定義します。これには、n、k、が必要です。 curr:=1 (kを1つ減らす) kがゼロ以外の場合、-を実行します。 steps:=関数calcSteps(n、curr、curr + 1)を呼び出します ステップ
-
算術スライスII-C++のサブシーケンス
N個の数が存在する配列Aがあるとします。その配列のサブシーケンススライスは、0 <=K0
-
C++の貧しい豚
1000個のバケツがあり、そのうちの1つは有毒で、他のバケツは水で満たされているとします。それらはすべて似ています。豚が毒を飲むと、15分以内に死んでしまいます。 1時間以内に有毒なバケツを見つけるために必要な豚の最小量はどれくらいですか? そこで、一般的なケースを考えて、このためのアルゴリズムを考案します。したがって、一般的なケースでは、n個の異なるバケツがあり、毒を飲んでいる豚がm分以内に死亡する場合、p分以内に有毒なバケツを見つけるには何匹の豚が必要ですか?毒の入ったバケツは1つだけです。 n =1000、m =15、p =60の場合、出力は5になります。 これを解決するには、次の
-
C++の連結語
単語のリストがあるとします。これらの言葉は明確です。与えられた単語のリストからすべての連結された単語を見つけるアルゴリズムを考案する必要があります。連結された単語は、実際には、指定された配列内の少なくとも2つの短い単語で完全に構成される文字列です。 したがって、単語が[cow、 cows、 cowsgoatcows、 goat、 goatcowsgoat、 hippopotamuses、 deer、 deercowgoatcow]の場合、出力は[cowsgoatcows、 goatcowsgoat、 deercowgoatcow] これを解決するには、次の手順に従います- 関数isPr
-
C++で最大のパリンドローム製品
nを入力したとすると、2つのn桁の数値の乗算を使用して作成できる最大の回文を見つける必要があります。数値が非常に大きいため、1337を使用してmodを実行できます。したがって、入力が2の場合、答えは987、987 =(99 * 91)mod 1337 =9009 mod 1337=987になります。 これを解決するには、次の手順に従います- maxVal:=10 ^ n – 1 minVal:=maxVal / 10 minValの場合、更新(hを1つ減らす)、実行- 左:=h、右:=0 0の場合、右=右* 10 + i mod 10、左:=左* 10、i:=i / 10、d
-
C++でのスライディングウィンドウの中央値
数値のリストがあり、1つのウィンドウサイズがkであるとすると、スライディングウィンドウ方式を使用して中央値のリストを見つける必要があります。したがって、分布が以下のような場合- ウィンドウの位置 中央値 1 3 -1 -3 5 3 6 8 1 1 3 -1 -3 5 3 6 8 -1 1 3 -1 -3 5 3 6 8 -1 1 3 -1 -3 5 3 6 8 3 1 3 -1 -3 5 3 6
-
C++でのZumaゲーム
ズマゲームについて考えてみましょう。テーブルにボールの列があるとすると、これらのボールは赤(R)、黄(Y)、青(B)、緑(G)、白(W)の色になります。また、いくつかのボールがあります。 さて、毎回、私たちは自分の側からボールを選び、それを列に挿入することができます。次に、同じ色のボールが3つ以上触れているグループがある場合は、それらを削除します。ボールを取り外せなくなるまでこれを続けます。 テーブル上のすべてのボールを削除するために挿入する必要のある最小限のボールを見つける必要があります。すべてのボールを削除できない場合は、-1を返します。 したがって、入力が「WRRBBW」のよう
-
C++でのリバースペア
配列があると仮定します。この配列では、次の条件を満たす場合、1つのペア(A[i]とA[j])を重要な逆ペアと呼びます- if i 2 * nums [j] 重要なリバースペアの数を見つける必要があります。したがって、入力が[2,8,7,7,2]の場合、結果は3になります。 これを解決するには、次の手順に従います- ans:=0 関数merge()を定義します。これにより、配列a、low、mid、highが取得されます。 k:=高-低+ 1 サイズkのアレイ温度を定義します i:=低、j =中+1、k:=0 最初:=半ば+ 1 i <=midの間、-を実行します
-
C++でのIPO
ある会社AがIPOをすぐに開始したいとします。株式の適正価格をBに売却するために、AはIPOの前に資本を増やすためのいくつかのプロジェクトに取り組みたいと考えています。 Aのリソースは限られており、IPOの前に完了することができるのは最大でk個の個別のプロジェクトのみです。最大でk個の個別のプロジェクトを完了した後、総資本を最大化するための最良の方法を設計することにより、Aを支援できますか? いくつかのプロジェクトがあるとします。プロジェクトiごとに、純粋な利益Piがあり、対応するプロジェクトを開始するには、Ciの最小資本が必要です。最初は、W資本があります。プロジェクトが完了すると、純粋な
-
C++のスーパー洗濯機
連続してn台のスーパー洗濯機があるとします。最初に、各洗濯機はいくつかのドレスを持っているか、空です。これで、移動ごとに、任意のm(1≤m≤n)の洗濯機を選択し、各洗濯機の1つのドレスを隣接する洗濯機の1つに同時に渡すことができます。行の左から右に各洗濯機のドレスの数を表す1つの整数配列があるとすると、すべての洗濯機に同じ数の衣服を持たせるための最小移動数を見つける必要があります。それが不可能な場合は、-1を返します。 したがって、入力が[1,0,5]の場合、出力は3になります。これは、5を0に送信するためです。したがって、分布は[1、1、4]になり、次に中央の1から左に1、4になります。
-
C++でボックスを削除する
=1)をいくつか選択し、それらを削除してk*kポイントを取得できます。したがって、入力が− [1,3,2,2,2,4,4,3,1]の場合、出力は21になります。 あなたが得ることができる最大のポイントを見つけてください。 これを解決するには、次の手順に従います- 関数solve()を定義します。これには、配列ボックスi、j、k、1つの3D配列dpが必要です。 jの場合、- 0を返す dp [i、j、k]が-1に等しくない場合、- return dp [i、j、k] ret:=-inf 条件i+1 <=jをチェックし、boxes [i +1]はboxes[i]と同じで、
-
C++での学生出席記録II
正の整数nがあるとすると、長さnのすべての可能な出席レコードの数を見つける必要があります。これは報われると見なされます。答えは非常に大きい可能性があるため、mod 109+7を使用して返します。 学生の出席記録では、文字列には次の3文字のみを含めることができます- 「A」は不在を意味します。 「L」は遅いことを意味します。 「P」は存在を意味します。 1回の出席は、複数の「A」(不在)または2つ以上の連続した「L」(後期)が含まれていない場合、報酬として扱われます。したがって、最大ポイントを見つける必要があります。 入力が2の場合、出力は8になります。これは、報酬を得ることができる8
-
C++で最も近い回文を見つける
数nがあるとすると、回文である最も近い数を取得する必要があります。したがって、回文は、絶対差が小さい数よりも少ないか、多い可能性があります。したがって、数値が145のような場合、結果は141になります。 これを解決するには、次の手順に従います- sn:=nのサイズ snが1と同じ場合、- n [0]を1減らし、サイズn[0]の1の文字列を返します half_sn:=(sn + 1)/ 2 half_val:=stol(インデックス0からhalf_snまでのnの部分文字列 配列候補を定義する={10^(sn)– 1、10 ^(sn-1)-1、10 ^(sn-1)+ 1、10
-
C++で連続するものがない非負の整数
正の整数nがあるとします。 n以下の非負の整数を見つける必要があります。制約は、バイナリ表現に連続した表現が含まれないことです。したがって、入力が7の場合、5のバイナリ表現は101であるため、答えは5になります。 これを解決するには、次の手順に従います- 関数convert()を定義します。これにはnが必要です。 ret:=空の文字列 nがゼロ以外の場合、-を実行します。 ret:=ret +(n mod 2) n:=右シフトn、1回 return ret メインの方法から、次の手順を実行します- ビット:=関数convert(num)を呼び出す n:=ビットのサイズ サ