XOR prefixsum CPP python解Leetcode 1829 Maximum XOR for Each Query
其實這裡考慮的是元素個數為2^maximumBit的交換群,運算子為XOR。
bitwise XOR has the perfect algebaic properties, e.g. x^x=0, x^y=y^x, x^(~x)=0
x^k=y implies x^k^x=k=y^x
[codes on Leetcode]https://leetcode.com/problems/maximum-xor-for-each-query/solutions/6021105/prefix-sum-1-pass-vs-partial-sum-beats-100/
[Prefix sum playlist]https://www.youtube.com/watch?v=1kA_aZHewmU&list=PLYRlUBnWnd5LkYN-5ptHDrtPXOuHm9uSq
[bit/ bit mask playlist]https://www.youtube.com/watch?v=Hw1fnQA8Nk8&list=PLYRlUBnWnd5K8FlzJ6tOswqQcsk7R1Duh
class Solution:
def getMaximumXor(self, nums: List[int], maximumBit: int) -> List[int]:
#bitwise XOR has the perfect algebaic properties, e.g. x^x=0, x^y=y^x, x^(~x)=0
#x^k=y=> x^k^x=k=y^x
mask, n=(2**maximumBit-1, len(nums)
ans=[0]*n
ans[-1]=nums[0]^mask
for i in range(1, n):
ans[~i]^=(ans[n-i]^nums[i])
return ans
沒有留言:
張貼留言