Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのk回の演算による繰り返し数を含む最長のサブリストの長さを見つけるプログラム


numsというリストと値kがあるとします。次に、リスト内の任意の数値の値を更新できる操作について考えてみましょう。最大k回の操作を実行した後、繰り返される数を含む最長のサブリストの長さを見つける必要があります。

したがって、入力がnums =[8、6、6、4、3、6、6] k =2の場合、出力は6になります。これは、4と3を6に変更して、この配列を作成できるためです[ 8、6、6、6、6、6、6]、すべて6のサブリストの長さは6です。

これを解決するには、次の手順に従います-

  • numsが空の場合、

    • 0を返す

  • num_count:=空のマップ

  • max_count:=0

  • start:=0

  • インデックスの終わりとnumの値numごとに、実行します

    • num_count [num]:=num_count [num] + 1

    • max_count:=max_countとnum_count[num]の最大値

    • end --start + 1> max_count + kの場合、

      • num_count [nums [start]]:=num_count [nums [start]]-1

      • start:=start + 1

  • リターンエンド-スタート+1

理解を深めるために、次の実装を見てみましょう

from collections import defaultdict
def solve(nums, k):
   if not nums:
      return 0

   num_count = defaultdict(int)
   max_count = 0
   start = 0

   for end, num in enumerate(nums):
      num_count[num] += 1
      max_count = max(max_count, num_count[num])
      if end - start + 1 > max_count + k:
         num_count[nums[start]] -= 1
         start += 1
   return end - start + 1

nums = [8, 6, 6, 4, 3, 6, 6]
k = 2
print(solve(nums, k))

入力

[8, 6, 6, 4, 3, 6, 6], 2

出力

6

  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

  2. Pythonで連続して厳密に増加するサブリストの長さを見つけるプログラム

    numsと呼ばれる数値のリストがあるとすると、リストから1つまたは0の要素を削除できるときに、連続する厳密に増加するサブリストの最大長を見つける必要があります。 したがって、入力がnums =[30、11、12、13、14、15、18、17、32]のような場合、リストから18を削除すると、[11、 12、13、14、15、17、32]これは最も長く、連続していて、厳密に増加するサブリストであり、その長さは7です。 これを解決するために、次の手順に従います- n:=numsのサイズ pre:=サイズnのリストと1で埋める 1からn-1の範囲のiの場合、実行 nums