Python程式:透過k次將0改為1來找到數字列表的最小可能和?
假設我們有一個名為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
返回 (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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP