用 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

