gpt4 book ai didi

python - 给定N,返回满足方程: N + M = 2 * (N XOR M)的M

转载 作者:行者123 更新时间:2023-12-02 16:09:41 24 4
gpt4 key购买 nike

问题

Given N, return M that satisfy the equation: N + M = 2 * (N ^ M)

约束

1 <= Test Cases = 10^5; 
1 <= N <= 10^18

我在一次招聘挑战中遇到了这个问题。

通过反复试验,我发现了一种模式:N/3 和 3N 之间存在这样一个 M 并且N + M 是偶数。因此,我将其编码并提交后,我的解决方案仅成功通过了一半的测试用例。这并不是什么优化,因为此方法的时间复杂度与蛮力解决方案相同。

我知道我的解决方案不是最优解。

这是我的解决方案:

def solve(n):
m = n//3
end = 3*n

# If both m and n are odd/even, their sum will be even
if (m&1 == 1 and n & 1 == 1) or (m&1 == 0 and n&1 == 0):
inc = 2
else:
m += 1
inc = 2

while m <= end:
if (n + m) == 2 * (n ^ m):
return m

m += inc

有人可以为我提供一些提示/方法/算法以获得最佳解决方案吗?谢谢!

最佳答案

确定m 的底部位(因为n+m 必须是偶数)。给定最低位,确定下一位,依此类推。

该观察导致了这个 O(log n) 解决方案:

def solve(n):
b = 1
m = 0
while n + m != 2 * (n ^ m):
mask = 2 * b - 1
if ((n + m) & mask) != ((2 * (n ^ m)) & mask):
m += b
b *= 2
return m

另一种实现方法是找到m+n2*(n^m) 不同的最小位,并在 中切换该位>米。这导致了这个非常紧凑的代码(使用新的海象运算符和一些位技巧):

def solve(n):
m = 0
while r := n + m ^ 2 * (n ^ m):
m |= r & -r
return m

关于python - 给定N,返回满足方程: N + M = 2 * (N XOR M)的M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68344067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com