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

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] + 1
    • スロットのサイズ>Kの場合、
      • slot [nums [i]]:=slot [nums [i]]-1
      • slot [nums [i]]が0と同じ場合、
        • スロットを削除[nums[i]]
      • i:=i + 1
    • res:=res + j-i + 1
  • return res
  • メインの方法から次のようにします-
  • return count(k)-count(k-1)

例(Python)

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

from collections import Counter
class Solution:
   def solve(self, nums, k):
      def count(K):
         slot = Counter()
         i = res = 0
         for j, x in enumerate(nums):
            slot[x] += 1
            while len(slot) > K:
               slot[nums[i]] -= 1
               if slot[nums[i]] == 0:
                  del slot[nums[i]]
               i += 1
            res += j - i + 1
         return res
      return count(k) - count(k - 1)
ob = Solution()
nums = [2, 2, 3, 4]
k = 2
print(ob.solve(nums, k))

入力

[2, 2, 3, 4], 2

出力

3

  1. Pythonで特定のエッジを含む一意のパスの数をカウントするプログラム

    (u、v)の形式のエッジのリストがあり、これらがツリーを表しているとします。エッジごとに、入力で指定されたのと同じ順序で、そのエッジを含む一意のパスの総数を見つける必要があります。 したがって、入力がエッジのような場合=[[0、1]、[0、2]、[1、3]、[1、4]] その場合、出力は[6、4、4、4]になります。 これを解決するには、次の手順に従います- adj:=指定されたエッジからの隣接リスト count:=空のマップ 関数dfs()を定義します。これにはx、親が必要です count [x]:=1 adj [x]のnbごとに、実行 n

  2. 一意の二分探索木の数をカウントするプログラムは、Pythonで0からnの値で形成できます

    1つの数nがあるとすると、[0、n)からの数で生成できる一意のBSTの数を見つける必要があります。答えが非常に大きい場合、結果は10 ^ 9 + 7になります。 したがって、入力がn =3の場合、出力は5になります これを解決するには、次の手順に従います- 数値:=1 denom:=n + 1 1からnの範囲のiについては、 numer:=numer * n + i numer:=numer mod m denom:=denom * i denom:=denom mod m numer:=numer *(denom ^(m-2))mod m ret