用 Python 编写程序,通过将数字列表中的 0 改为 1 k 次,找到最小可能和?

pythonserver side programmingprogramming更新于 2026/2/16 3:56:17

假设我们有一个名为 nums 的数字列表和另一个值 k。我们必须进行以下操作 k 次:选择列表中的任意数字。在该数字的二进制表示中,选择一个 0 位并将其设为 1。最后,我们必须在执行 k 次操作后返回所有数字的最小可能和。如果答案太高,则返回结果模式 10^9+7。

因此,如果输入为 nums = [4, 7, 3] k = 2,则输出将为 17,因为 4 的二进制表示为 100,3 为 011,7 为 111。由于我们需要设置 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

  • 返回 (and + 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

相关文章


有用资源