-
Pythonを使用してm個の花束を作るための最小日数を見つけるプログラム
numsと呼ばれる整数の配列があるとすると、さらに2つの値mとkがあります。今、私たちはm個の花束を作る必要があります。 1つの花束を作るには、庭から隣接するk個の花が必要です。ここでは、庭はn種類の花で構成されており、i番目の花はbloomDay[i]に咲きます。各花は1つの花束の中でのみ使用できます。庭からm個の花束を作るのに必要な最小日数を見つける必要があります。 m個の花束を作成できない場合は、-1を返します。 したがって、入力がbloomDay =[5,5,5,5,10,5,5] m =2 k =3のようである場合、2(m =2)の花束が必要であり、それぞれが必要であるため、出力は
-
Pythonを使用してファイル名を一意にするプログラム
名前と呼ばれるn個の文字列の配列があるとします。ファイルシステムにn個のディレクトリを作成して、i番目の時点でnames[i]という名前のディレクトリを作成する必要があります。 2つのファイルに同じ名前を付けることはできません。重複するディレクトリ名を入力すると、システムの名前に(k)の形式で接尾辞が追加されます。ここで、kは、取得した名前が一意のままになる最小の正の整数です。長さnの文字列の配列を見つける必要があります。ここで、ans [i]は、作成時にi番目のディレクトリに割り当てられる実際の名前です。 したがって、入力がnames =[my_dir、 my_dir(1)、 my_new
-
Pythonを使用してnのk番目の因子を見つけるプログラム
2つの正の値nとkがあるとします。ここで、nのすべての因子のリストが昇順でソートされていると考えて、このリストでk番目の因子を見つける必要があります。 k未満の因子がある場合は、-1を返します。 したがって、入力がn =28 k =4の場合、28の因数は[1,2,4,7,14,28]であり、4番目の因数は7であるため、出力は7になります。 これを解決するには、次の手順に従います- kが1と同じ場合、 1を返す cand:=1つの要素を持つリスト[1] 2から1の範囲のi+(nの平方根)のフロアの場合、実行 n mod iが0と同じ場合、 candの最
-
Pythonを使用して1つの要素を削除した後、1の最長のサブ配列を見つけるプログラム
numsというバイナリ配列があるとすると、そこから1つの要素を削除できます。結果の配列に1のみが含まれている、空でない最長のサブ配列のサイズを見つける必要があります。そのようなサブ配列がない場合は、0を返します。 したがって、入力がnums =[1,0,1,1,1,0,1,1,0]のような場合、位置5から0を削除することでサブ配列[1を取得できるため、出力は5になります。 、1,1,1,1]5つの1があります。 これを解決するには、次の手順に従います- 0がnumsでない場合、 numsの戻りサイズ-1 1がnumsでない場合は、 0を返す a:=新し
-
配列ペアがkで割り切れるか、Pythonを使用していないかを確認するプログラム
numsという配列があり、この配列には偶数の要素が含まれ、別の値kがあるとします。各ペアの合計がkで割り切れるように、numを正確にn/2ペアに分割する必要があります。可能であればtrueを返し、そうでない場合はfalseを返します。 したがって、入力がnums =[9,5,3,4,7,10,20,8] k =3のような場合、(9,3)、(5)のようなペアを作成できるため、出力はTrueになります。 、7)、(4,20)、(8,10)、すべてのペアの合計は3で割り切れます。 これを解決するには、次の手順に従います- dp:=新しいリスト count:=0 numsのxご
-
Pythonを使用して、指定された合計条件を満たすサブシーケンスの数を見つけるプログラム
numsという配列と別の値kがあるとします。 numsの空でないサブシーケンスの数を見つけて、その最小要素と最大要素の合計がk以下になるようにする必要があります。回答は非常に大きい可能性があるため、回答mod 10 ^ 9+7を返します。 したがって、入力がnums =[4,6,7,8] k =11のような場合、のようなサブシーケンスがあるため、出力は4になります。 [4]、ここでは最小値は4、最大値は4なので、4 + 4 <=11 [4,6]、ここでは最小値は4、最大値は6なので、4 + 6 <=11 [4,6,7]、ここでは最小は4、最大は7なので、4 + 7 <=
-
Pythonを使用してすべてのもので正方形の部分行列の数を数えるプログラム
m x nのバイナリ行列があるとすると、すべてが1である正方形の部分行列の数を見つける必要があります。 したがって、入力が次のようになっている場合。 0 1 1 1 1 1 1 1 0 1 1 1 辺1が10個、辺2が4個、辺3が1個あるため、出力は15になります。次に、正方形の総数=10 + 4 + 1=15です。 これを解決するには、次の手順に従います- 行列に単一の行列がある場合、 1を返す 行:=行列の行数 cols:=行列の列数[0] 結果:=0 0から行-1までの範
-
Pythonを使用してすべての部分行列をカウントするプログラム
m x nのバイナリ行列があるとすると、すべての部分行列がいくつあるかを調べる必要があります。 したがって、入力が次のような場合 1 0 1 0 1 1 0 1 1 6(1x1)行列、3(2,1)行列、2(1x2)行列、1(3x1)行列、1(4x4)行列があるため、出力は13になります。 これを解決するには、次の手順に従います- m:=行列の行数 n:=行列の列数 dp:=同じサイズのゼロ行列m x n 0からm-1の範囲のiの場合、実行 0からn-1の範囲のjの場合、実行 iが0およびmatr
-
Pythonを使用してソートされたサブ配列の合計の範囲の合計を見つけるプログラム
n個の正の要素を持つ配列numがあるとします。 numsの空でない連続するすべてのサブ配列の合計を計算し、n *(n + 1)/ 2の数値の新しい配列を作成することにより、それらを減少しない方法で並べ替えるとします。新しい配列で、インデックス左からインデックス右(1インデックス)までの数値の合計を見つける必要があります。答えは非常に大きい可能性があるため、10 ^ 9+7を法とする結果を返します。 したがって、入力がnums =[1,5,2,6] left =1 right =5のような場合、ここではすべてのサブ配列の合計が1、5、2、6、6、7、8であるため、出力は20になります。 、8、
-
Pythonを使用して3つの動きで最大値と最小値の最小差を見つけるプログラム
numsという配列があるとします。この配列から1つの要素を1回の移動で任意の値に変更できます。最大3回の移動を実行した後、numsの最大値と最小値の最小差を見つける必要があります。 したがって、入力がnums =[3,7,2,12,16]のような場合、[1,1,0,1,1]に指定された配列を作成できるため、出力は1になります。したがって、最大値は1で最小値は0なので、差は1です。 これを解決するには、次の手順に従います- numsのサイズが<=4の場合、 0を返す リスト番号を並べ替える ans:=無限大 0から3の範囲のiの場合、実行 mi:=nu
-
Pythonを使用して1のみの部分文字列の数を見つけるプログラム
バイナリ文字列sがあるとします。すべての文字が1である部分文字列の数を見つける必要があります。答えは非常に大きい可能性があるため、結果mod 10 ^ 9+7を返します。 したがって、入力がs =1011010の場合、出力は5になります。これは1.4回12.1回11 これを解決するには、次の手順に従います- m:=10 ^ 9 + 7 結果:=0 div:=「0」を使用してバイナリ文字列を分割する div内のxごとに、実行します xが空の場合は、次の反復に進みます 結果:=結果+(xのサイズ*(x +1のサイズ))/2の商 結果を返すmod
-
Pythonを使用して最大の確率でパスを見つけるプログラム
n個のノード(ノードには0から番号が付けられます)を持つ無向加重グラフがあるとします。このグラフは、エッジリストを使用して入力として与えられ、各エッジeについて、そのエッジ確率[e]を通過する成功の確率があります。開始ノードと終了ノードもあります。最初から最後まで成功の確率が最大のパスを見つけて、成功の確率を返す必要があります。パスが見つからない場合は、0を返します。 したがって、入力が次のような場合 ノード0から2へのパスが2つあるため、出力は0.24になります。1つは確率0.2、もう1つはノード1を経由するパスの確率は0.4 * 0.6 =0.24で、これが最大です。 これを解
-
Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム
ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します したがって、入力が次のような場合 ここで、n =5およびlabel=“ ccaca” ルートには同じラベルの子
-
Pythonを使用して合計が奇数のサブ配列の数を見つけるプログラム
配列arrがあるとします。合計が奇数のサブ配列の数を見つける必要があります。答えが大きすぎる場合は、10 ^ 9+7を法とする結果を返します。 したがって、入力がarr =[8,3,7]の場合、すべてのサブ配列が[[8]、[3]、[7]、[8,3]、[3、 7]、[8,3,7]]これで、それらの合計値は[8,3,7,11,10,18]になるため、3つの奇数の合計値[3,7,11]があります。 これを解決するには、次の手順に従います- freq:=1と0の2つの要素を持つリスト ans:=0 プレフィックス:=0 arrのxごとに、実行します プレフィックス
-
Pythonを使用して文字列を分割するためのいくつかの良い方法を見つけるためのプログラム
文字列sがあるとします。ここで、sを2つの空でない文字列pとqに分割でき、その連結がsに等しく、pとqの個別の文字の数が等しい場合、分割は適切な分割であると言われます。 sで作成できる適切な分割の数を見つける必要があります。 したがって、入力がs =xxzxyxの場合、分割には複数の方法があるため、出力は2になりますが、( xxz、 xyx)または( xxzx、 yx)のように分割すると、それなら彼らは良いです。 これを解決するには、次の手順に従います- 結果:=0 左:=アイテムの頻度をカウントするための空のマル 右:=sに存在する各キャラクターの頻度を数える
-
Pythonを使用してバイナリ文字列を使用して電球スイッチャーを作成するプログラム
部屋にn個の電球があるとすると、これらの電球には0からn-1までの番号が付けられます。それらを左から右に一列に並べる必要があります。最初は、すべての電球がオフになっています(0状態)。与えられたターゲット配列「t」で表される構成を取得する必要があります。ここで、t [i]は、i番目の電球がオンの場合は「1」、オフの場合は「0」です。電球の状態を反転させるスイッチもあります。そして、反転操作は次のように定義されます- 任意の電球インデックスiを選択します。 各電球をインデックスiからインデックスn-1に反転します。 ターゲットを形成するために必要なフリップの最小数を見つける必要
-
Pythonを使用して適切なリーフノードペアの数を見つけるプログラム
二分木があるとします。および別の値の距離d。 2つの異なるリーフノードのペアは、これら2つのノード間の最短経路が距離dよりも小さいか、同じである場合に適切であると言われます。 したがって、入力が次のような場合 距離d=4の場合、パスの長さの距離が2であるため、ペアは(8,7)と(5,6)ですが、(7,5)または(8,6)または他のペアであるため、出力は2になります。パスの長さが5であり、d=4よりも大きいため適切ではありません これを解決するには、次の手順に従います- sol:=0 関数util()を定義します。これが定着します ルートがnullの場合、
-
Pythonを使用して配列ゲームの勝者を見つけるプログラム
arrという配列があり、これには一意の要素が含まれており、別の値kもあるとします。ここで、配列の最初の2つの要素を取得するゲームについて考えてみます。各ターンで、arr[0]とarr[1]を比較します。大きい方の値が優先され、位置0に留まり、小さい方の値が配列の最後に移動します。このゲームは、値がk回連続で勝ったときに終了します。アレイから勝者を見つける必要があります。 したがって、入力がarr =[1,5,6,3,4,2]で、k =3の場合、出力は6になります。 ラウンド1、arr =[1,5,6,3,4,2]、勝者5、5の勝ち数は1です ラウンド2、arr =[5,6,3,4
-
Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム
nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの
-
Pythonを使用してKムーブで文字列を変換できるかどうかを確認するプログラム
2つの文字列sとtがあるとすると、sをk移動以下でtに変換できるかどうかを確認する必要があります。どちらの動きでも、これらの操作を実行できます。 s内の任意のインデックスj(1から始まる)を選択して、1 <=j <=sのサイズとjが前の移動で選択されていないようにし、そのインデックスiの文字をi回シフトします。 そのままにしておきます。 ここで、文字をシフトするということは、アルファベットの次の文字に置き換えることを意味します(文字が「z」の場合は、「a」に折り返します)。したがって、文字をi回シフトすることは、シフト操作をi回適用することを意味します。 したがって、入力が