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

Pythonでセットの最小要素と最大要素の合計がk未満である空でないサブセットをカウントするプログラム


numsと呼ばれる数のリストと別の値kがあるとすると、Sの最小値+Sの最大値<=kとなるような空でないサブセットSの数を見つける必要があります。サブセットはマルチセットであることに注意する必要があります。したがって、サブセットは値ではなくリストの特定の要素を参照しているため、サブセットに重複する値が存在する可能性があります。

したがって、入力がnums =[2、2、5、6]、k =7の場合、出力は6になります。これは、[2]、[2]、[2、 2]、[2、5]、[2、5]、[2、2、5]。

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

  • N:=Aのサイズ
  • リストAを並べ替える
  • ans:=0
  • j:=N-1
  • 0からNの範囲のiについては、
    • jおよびA[i]+ A [j]> Kの場合、実行
      • j:=j-1
    • i<=jかつA[i]+ A [j] <=Kの場合、
      • ans:=ans + 2 ^(j --i)
  • 回答を返す

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

class Solution:
   def solve(self, A, K):
      N = len(A)
      A.sort()
      ans = 0
      j = N - 1
      for i in range(N):
         while j and A[i] + A[j] > K:
            j -= 1
            if i <= j and A[i] + A[j] <= K:
               ans += 1 << (j - i)
      return ans
ob = Solution()
nums = [2, 2, 5, 6]
k = 7 print(ob.solve(nums, k))

入力

[2, 2, 5, 6]

出力

6

  1. Pythonで合計がkであるパスの数をカウントするプログラム

    二分木と別の値kがあるとすると、合計がkになるサブ子パスへの一意のノードの数を見つける必要があります。 したがって、入力が次のような場合 k =5の場合、パスは[2、3]と[1、4] であるため、出力は2になります。 これを解決するには、次の手順に従います- count:=マップは最初にキー0の値1を保持します ans:=0、プレフィックス:=0 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 プレフィックス:=プレフィックス+ノードの値 ans:=ans +(count [prefix --target]、これが利用できない場合は0にな

  2. 配列内の最大の要素を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n):    #maximal element