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

Pythonでおいしい食事を数える


おいしい食事には、2の累乗に等しい美味しさの合計を持つちょうど2つの異なる食品が含まれています。おいしい食事を作るために、2つの異なる食べ物を選ぶことができます。

整数の配列arrを指定したとしましょう。ここで、arr [i]はi番目の食品の美味しさであり、このリストから作成できるさまざまなおいしい食事の数を返します。

たとえば、

入力-1

arr[ ] = {1, 3, 5, 7, 9}

出力

4

説明 −おいしい食事は、(1,3)、(1,7)、(3,5)、および(7,9)です。それぞれの合計は4、8、8、および16であり、これらはすべて2の累乗です。

入力-2

arr[ ]= {1,1,1,3,3,3,7}

出力

15

説明 −おいしい食事は、(1,1)3つの方法、(1,3)9つの方法、(1,7)3つの方法です。

この問題を解決するために使用されるアプローチ

  • 入力を正の整数の配列として受け取ります。

  • 関数カウントペアは、すべての配列要素を整数のリストとして受け取ります。

  • 入力配列要素を昇順で並べ替えます。

  • 配列のすべての要素について、すべての要素が「2」の累乗になるような最大の合計を見つけます。

class Solution:
   def countpairs(self, arr: List[int]) -> int:
      """
         elem1 + elem2 == 1 << i
         elem1 = 2 << i - elem2
      """
      result = 0
      seen = defaultdict(int)
      arr.sort()
      for d in arr:
         n = 1
         while n <= d + d:
            ans = (ans + seen[n-d]) % (10 ** 9 + 7)
            n = n << 1
         seen[d] += 1
      return ans
sol1= Solution()
print(sol1.countpairs([1,1,1,3,3,3,7]))

出力

4

  1. Pythonで数えて言う

    ここでは、カウントと発言のシーケンスが表示されます。これは、いくつかの用語が以下のようなシーケンスです- 1 11 21 1211 111221 文字列は次のように読み取られます 1(1) 11(One 1)前の1を読んで、「One1」と言います 21(Two 1)前の11を読んで、「Two1」と言ってください 1211(One 2 one 1)前の21を読んで、「One 2one1」と言います 111221(One 1 1 2 2 2 1)前の1211を読んで、「One 1 1 221」と言います 数n、1 <=n <=30があるとすると、n番目の項

  2. 配列内の反転をカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。必要な反転をカウントして表示する必要があります。 反転カウントは、配列をソートするために必要なステップ数をカウントすることによって取得されます。 次に、以下の実装のソリューションを見てみましょう- 例 # count def InvCount(arr, n):    inv_count = 0    for i in range(n):       for j in range(i + 1, n):