程序通过从Python中的数字列表中将0s更改为1s k次来查找最小可能的总和?
假设我们有一个称为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不为零时,
如果(n/2^i)是偶数,则
从循环中出来
ans:=ans+2^i
k:=k-1
如果k等于0,则
对于每n个数字,执行
我:=我+1
return(ans+nums所有元素的总和)modm
让我们看下面的实现以更好地理解:
示例
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
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短