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

Pythonの数値リストから0をk回変更して最小の合計を見つけるプログラムはありますか?


numsと呼ばれる数値のリストと別の値kがあるとします。次の操作をk回行​​う必要があります。リストから任意の数を選択します。その数値の2進表現で、0のビットを選択して1にします。最後に、k回の演算を実行した後、すべての数値の可能な最小の合計を返す必要があります。答えが高すぎる場合は、結果モード10 ^ 9+7を返します。

したがって、入力がnums =[4、7、3] k =2の場合、4のバイナリ表現は100、3は011、7は111であるため、出力は17になります。 2ビットの場合、4ビットを設定して111(7)にすることができます。その場合、合計は7 + 7 + 3=17になります。

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

  • ans:=0、i:=0

  • kがゼロ以外の場合、実行

    • numsのnごとに、実行します

      • (n / 2 ^ i)が偶数の場合、

        • ans:=ans + 2 ^ i

        • k:=k-1

        • kが0と同じ場合、

          • ループから出てきます

    • i:=i + 1

  • return(ans + numsのすべての要素の合計)mod m

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

class Solution:
   def solve(self, nums, k):
      m = (10 ** 9 + 7)
      ans = 0
      i = 0
      while k:
         for n in nums:
            if (n >> i) & 1 == 0:
               ans += 1 << i
               k -= 1
               if k == 0:
                  break
                  i += 1
      return (ans + sum(nums)) % m

ob = Solution()
nums = [4, 7, 3]
k = 2
print(ob.solve(nums, k))

入力

[4, 7, 3], 2

出力

17

  1. リストの累積合計を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、累積合計でリストを作成する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # cumulative sum def Cumulative(l):    new = []    cumsum = 0    for element in l:       cumsum += element       new.append(cumsum) &

  2. リスト内の要素の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力としてリストが与えられた場合、与えられたリストの合計を計算する必要があります。 ここでは、考慮すべき2つのアプローチがあります。つまり、組み込み関数を使用する方法と、ブルートフォースアプローチを使用する方法です。 アプローチ1-組み込み関数の使用 例 # main arr = [1,2,3,4,5] ans = sum(arr) print ('Sum of the array is ',ans) 出力 15 すべての変数と関数はグローバルスコープで宣言されて