Giả sử chúng ta có một danh sách các số được gọi là num và một giá trị khác là k. Chúng ta phải thực hiện thao tác sau k lần:Chọn một số bất kỳ trong danh sách. Trong biểu diễn nhị phân của số đó, chọn một bit là 0 và biến nó thành 1. Cuối cùng, chúng ta phải trả về tổng nhỏ nhất có thể có của tất cả các số sau khi thực hiện k phép toán. Nếu câu trả lời quá cao, hãy trả về chế độ kết quả 10 ^ 9 + 7.
Vì vậy, nếu đầu vào là nums =[4, 7, 3] k =2, thì đầu ra sẽ là 17, vì biểu diễn nhị phân của 4 là 100, 3 là 011 và 7 là 111. Vì chúng ta cần đặt 2 bit, chúng ta có thể đặt các bit của 4 để tạo thành 111 (7). Khi đó tổng tổng là 7 + 7 + 3 =17.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:
-
ans:=0, i:=0
-
trong khi k khác 0, thực hiện
-
đối với mỗi n trong số, thực hiện
-
nếu (n / 2 ^ i) chẵn thì
-
ans:=ans + 2 ^ i
-
k:=k - 1
-
nếu k giống 0 thì
-
đi ra từ vòng lặp
-
-
-
-
i:=i + 1
-
-
return (ans + tổng của tất cả các phần tử của num) mod m
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:
Ví dụ
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))
Đầu vào
[4, 7, 3], 2
Đầu ra
17