Pythonですべてのタスクを完了するための最小時間を見つけるためのプログラム
numsと呼ばれる数値のリストがあり、各値がタスクの完了にかかる時間の単位を決定しているとします。連続していないタスクはスキップできます。すべてのタスクを完了するのにかかる最小時間を見つける必要があります。
したがって、入力がnums =[11、6、8、16]の場合、最初と最後のタスクをスキップできるため、出力は14になります。
これを解決するには、次の手順に従います。
- n:=numsのサイズ
- table:=n x 2行列を作成し、これを0で埋めます
- table [0、0]:=0
- table [0、1]:=nums [0]
- 1からn-1の範囲のiの場合、do
- table [i、0]:=table [i-1、1]
- table [i、1] =(table [i-1、0]およびtable [i-1] [1]の最小値)+ nums [i]
- テーブル行の最小値を返す[n-1]
理解を深めるために、次の実装を見てみましょう。
例
class Solution: def solve(self, nums): n = len(nums) table = [[0] * 2 for _ in range(n)] table[0][0] = 0 table[0][1] = nums[0] for i in range(1, n): table[i][0] = table[i - 1][1] table[i][1] = min(table[i - 1][0], table[i - 1][1]) + nums[i] return min(table[n - 1]) ob = Solution() nums = [11, 6, 8, 16] print(ob.solve(nums))
入力
[11, 6, 8, 16]
出力
14
-
Pythonですべてのポイントを接続するための最小コストを見つけるためのプログラム
(x、y)の形式のいくつかの点を持つpointsという配列があるとします。ここで、2つのポイント(xi、yi)と(xj、yj)を接続するコストは、それらの間のマンハッタン距離であり、式は| xi--xj|です。 + | yi--yj|。すべてのポイントを接続するための最小コストを見つける必要があります。 したがって、ここでの合計距離は(6 + 5 + 3 + 8)=22です。 これを解決するには、次の手順に従います- points_set:=範囲0からポイントのサイズ-1までの数値を保持する新しいセット ヒープ:=ペア(0、0)でヒープを作成します visited_node:
-
Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム
n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=