-
Pythonで石で川を渡れるかどうかを確認するプログラム
石と呼ばれるソートされた番号のリストがあり、これが横断しようとしている川の石の位置を表しているとします。川を渡るには、最後の石で終わらせなければなりません。これで、各ステップで、(k-1、k、またはk + 1)ステップ先にジャンプできます。ここで、kは最後のジャンプの距離です。川を渡れるかどうかを確認する必要があります。 したがって、入力がstones =[0、1、3、4、5、6、8、9、13]のようである場合、出力はTrueになります。これは、0から開始して、1ユニットジャンプして石に移動できるためです。 1、次に2ユニットで3になり、その後2ユニットで5になり、次に3ユニットで8になり、
-
Pythonですべての1をグループ化するために必要なスワップの数をカウントするプログラム
バイナリ文字列があり、任意の2ビットを交換できるとします。すべての1をグループ化するために必要なスワップの最小数を見つける必要があります。 1111000。 これを解決するには、次の手順に従います- data:=指定されたバイナリ文字列からの0と1のリスト 1つ設定:=0、n:=データ配列の長さ サイズnの配列の合計を作成し、これを0で埋め、summ [0]:=data [0]を設定します。 one:=one + data [0] 1からn–1の範囲のiの場合 summ [i]:=summ [i-1] + data [i] one:=one + data [i] an
-
Pythonで指定された2つのリストのいずれかの最終インデックスに到達するためのコストを見つけるためのプログラム
同じ長さの数値nums0とnums1の2つのリストがあり、距離としてd、コストとしてcの他の2つの値があるとします。 nums0またはnums1のいずれかでインデックス0から開始し、いずれかのリストの最終インデックスで終了したい場合。これで、各ラウンドで、コストのコストについて他のリストに切り替えることを選択できます。次に、最大d距離離れたところにジャンプできます。ここで、インデックスに着陸するためのcコストは、その時点での値です。したがって、タスクを完了するために可能な最小の総コストを見つける必要があります。 したがって、入力がnums0 =[2、3、10、10、6] nums1 =[10
-
Pythonでサイズkの増加するサブシーケンスの数を見つけるプログラム
numsと呼ばれる数のリストと別の値kがあるとすると、厳密に増加しているサイズkのサブシーケンスの数を見つける必要があります。答えが非常に大きい場合は、10 ^ 9+7で変更します。 したがって、入力がnums =[2、3、4、1] k =2のような場合、サイズ2のサブシーケンスがあるため、出力は3になります。[2、3]、[3、4]、 [2、4]。 これを解決するには、次の手順に従います- m:=10 ^ 9 + 7 dp:=numsと同じサイズのリストで、1を入力します 次のk回繰り返します。 dp-1から0の範囲サイズのjの場合、1ずつ減らします。 dp [j]:=0
-
Pythonでジョブをスケジュールして最大の利益を得るプログラム
各間隔に3つの値[開始、終了、利益]が含まれる間隔のリストがあるとします。一度に実行できるタスクは1つだけであり、得ることができる最大の利益を見つける必要があります。 したがって、入力がintervals =[[1、2、100]、[3、5、40]、[6、19、150]、[2、100、250]]のような場合、出力は350になります。これらの2つの間隔[1、2、100]と[2、100、250]をとることができるので これを解決するために、次の手順に従います d:=値としてリストを含む空のマップ n:=0 間隔を置いて(開始、終了、利益)ごとに、 nの場合、 n:=終了 ペア(
-
Pythonでサイズkの辞書式に最小のサブシーケンスを見つけるプログラム
numsと呼ばれる数値のリストと別の値kがあるとすると、サイズkの辞書式順序で最小のサブシーケンスを見つける必要があります。 したがって、入力がnums =[2、3、1、10、3、4] k =3の場合、出力は[1、3、4]になります。 これを解決するには、次の手順に従います- l:=numsのサイズ、r:=k-1 out:=新しいリスト 0からkの範囲のjについては、 mn:=nums[rの補集合] rからlの範囲のiについては、 =nums [complement of i]の場合、 mn:=nums [complement of i] l:=i r:=
-
Pythonで正確にk個の一意の要素を持つサブリストの数をカウントするプログラム
numsと呼ばれる番号のリストと別の値kがあるとすると、サブリストに正確にk個の一意の番号が存在するために必要なサブリストの数を見つける必要があります。 したがって、入力がnums =[2、2、3、4] k =2のような場合、[2、2、3]、[2、3]、のようなサブリストがあるため、出力は3になります。 [3、4]。 これを解決するには、次の手順に従います- 関数count()を定義します。これにはKがかかります slot:=空のマップ、デフォルトではすべての値は0です i:=res:=0 各インデックスj、および値x numに対して、do slot [x]:=slot [x]
-
Pythonで左上のポイントから右下のポイントに到達できる方法の数を見つけるためのプログラム
1つのNxMバイナリ行列があるとします。ここで、0は空のセルを意味し、1はブロックされたセルを意味します。左上隅から始めて、右下隅に到達する方法の数を見つける必要があります。答えが非常に大きい場合は、10 ^ 9+7で変更します。 したがって、入力が次のような場合 0 0 1 0 0 0 1 1 0 右下に移動するには、[右、下、右、下]と[下、右、右、下]の2つの方法があるため、出力は2になります。 これを解決するには、次の手順に従います- dp:=指定された行列と同じサイズの行列で、0で埋めます dp [0、0]:=1
-
Pythonの特定のツリーから最大の二分探索サブツリーを見つけるプログラム
二分木があるとすると、二分探索木として最大のサブツリー(ノード数が最大)を見つける必要があります。 したがって、入力が次のような場合 その場合、出力は次のようになります これを解決するには、次の手順に従います- max_size:=[0] max_node:=[null] 関数traverse()を定義します。これはノードを取ります ノードがnullの場合、 nullを返す 左:=トラバース(ノードの左) right:=traverse(ノードの右側) lst:=左+[ノードの値]+右 lstがソートされている場合、 max_size [0]
-
Pythonで同じ合計の3つの重複しないサブリストの最大合計を見つけるプログラム
numsと呼ばれる数値のリストと別の値kがあるとすると、サイズkの指定されたリストの3つの重複しないサブリストの最大の合計を見つける必要があります。 したがって、入力がnums =[2、2、2、-6、4、4、4、-8、3、3、3] k =3のような場合、出力は27になり、サブリスト[2、2、2]、[4、4、4]、および[3、3、3]、合計は27です。 これを解決するには、次の手順に従います- P:=[0] Aのxごとに、 Pの最後にP[-1]+xを挿入します Q:=[P [i + K] --P [i] for i in range 0 to size of P --K] プ
-
Pythonでリストをkより大きいサイズの厳密に増加するサブリストに分割するプログラム
numsと呼ばれる数値のリストと別の値kがあるとすると、各サブリストの長さがk以上で、厳密に増加するように、リストをサブリストリストに分割できるかどうかを確認する必要があります。リストを連続して分割する必要はありません。 したがって、入力がnums =[6、7、5、10、13] k =2のような場合、分割は[5、6]と[7、10、13]であるため、出力はTrueになります。 これを解決するには、次の手順に従います- c:=numsの要素とそのカウントを含むマップ max_count:=cのすべての頻度の最大値 max_count *k<=数値のサイズの場合はTrueを返します。それ
-
Pythonでリストを連続して増加するサブリストに分割できるかどうかを確認するプログラム
numsと呼ばれる番号のリストがあり、それが降順ではない順序でソートされているとすると、各サブシーケンスの長さが3以上で、連続して増加するように、任意の数のサブシーケンスに分割できるかどうかを確認する必要があります。 したがって、入力がnums =[2、3、4、4、5、6、7]のような場合、リストを[2、3、4]と[4、 5、6、7]。 これを解決するには、次の手順に従います- counts:=numsの要素とそのカウントを含むマップ 開始:=新しいリスト 終了:=新しいリスト カウントの項目の各xについて、ソートされた順序で実行します count [x-1]の場合、 l:=サイズ
-
Pythonの特定のリストから最長の交互サブシーケンスの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、2つの連続する数値の差が正と負の間で交互になる、最長のサブシーケンスのサイズを見つける必要があります。そして、最初の違いは正または負のいずれかです。 したがって、入力がnums =[6、10、4、2、3、9、4、7]のような場合、必要なサブシーケンスは[6、10、2、9、4]であるため、出力は6になります。 、7]であり、違いは[4、-8、7、-5、3]です。 これを解決するために、次の手順に従います&minuS; n:=numsのサイズ dp:=サイズ2nのリストで、1で埋めます ans:=0 0からnの範囲のiについては、
-
Pythonで特定のリストの最長の算術サブシーケンスの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、最長の算術サブシーケンスの長さを見つける必要があります。シーケンスS[i]は、S [i + 1] --S [i]が範囲内のすべてのiに対して同じ値を持つ場合の等差数列です(0≤i
-
Pythonで3つの文字列の最長共通部分列の長さを見つけるプログラム
3つの文字列s1、s2、およびs3があるとすると、それらの最長共通部分列の長さを見つける必要があります。 したがって、入力がs1 =ababchemxde s2 =pyakcimde s3 =oauctimeの場合、最長共通部分列は acmeであるため、出力は4になります。 これを解決するには、次の手順に従います- m:=s1のサイズ、n:=s2のサイズ、o:=s3のサイズ dp:=サイズ(o + 1)x(n + 1)x(m + 1)の3D行列 1からmの範囲のiについては、 1からnの範囲のjについては、 1からoの範囲のkについては、 s1 [i-1]、s2 [j-1]、
-
Pythonで合計が偶数の最長パスの長さを見つけるプログラム
二分木があるとします。合計が偶数である最長のパスの長さを見つける必要があります。 したがって、入力が画像のような場合、パスは[5、2、4、8、5]、合計=24(偶数)のようになるため、出力は5になります。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、 ペアを返す(0、-inf) (left_0、left_1):=dfs(ノードの左側) (right_0、right_1):=dfs(ノードの右側) ノードの値が奇数の場合、 ans:=ansの最大値、(left_1 + right_0 + 1)および(left_
-
Pythonの特定の行列で最も長く増加するパスの長さにプログラムする
2Dマトリックスがあるとすると、厳密に増加する最長のパスの長さを見つける必要があります。パスをトラバースするには、上、下、左、右、または斜めに移動できます。 したがって、入力が次のような場合 2 4 6 1 5 7 3 3 9 最長のパスは[1、2、4、6、7、9] であるため、出力は6になります。 これを解決するには、次の手順に従います- n := row count of matrix , m := column count of matrix moves := a list of pairs to move up, down,
-
Pythonで最長のパリンドロームサブシーケンスの長さを見つけるプログラム
小文字の文字列sがあるとします。 sで最も長いパリンドロームサブシーケンスの長さを見つける必要があります。 したがって、入力がs =aolpeuvekylのような場合、回文は「レベル」であるため、出力は5になります。 これを解決するには、次の手順に従います- n:=sのサイズ 関数dp()を定義します。これにはi、jが必要です iがjと同じ場合、 1を返す jの場合、 0を返す それ以外の場合、 s[i]がs[j]と同じ場合、 return 2 + dp(i + 1、j-1) それ以外の場合、 dp(i + 1、j)およびdp(i、j-1)の最大値を返します
-
Pythonでノードを繰り返さずにDAGで最長のパスの長さを見つけるプログラム
隣接リストで表される有向非巡回グラフが1つあるとします。ノードを繰り返さずに、グラフ内で最長のパスを見つける必要があります。 したがって、入力が次のような場合 2、長さが4であるため、出力は4になります。 これを解決するには、次の手順に従います- ans:=0 n:=グラフのノード数 table:=サイズnのリストで、-1で埋めます 関数dfs()を定義します。これには時間がかかります table [u]が-1でない場合、 リターンテーブル[u] p_len:=0 グラフ[u]の各vectexvについて、を実行します。 p_len:=最大p_lenおよび(1
-
Pythonで1回転した後の最長のパリンドローム部分文字列の長さを見つけるプログラム
文字列sがあり、任意のポイントで1回だけ回転できるとします。この操作を行うことで取得できる最長のパリンドローム部分文字列の長さを見つける必要があります。 したがって、入力がs =elklevの場合、出力は7になります。これは、elとklevの間で回転して、levelkを取得できるためです。したがって、ここでの最長のpalinfromicサブストリングの長さは5です。 これを解決するには、次の手順に従います- s2:=sを2回連結する max_len:=0 範囲0からs− 1のサイズのxの場合、実行 0からsのサイズまでの範囲のyについては、次のようにします