代码拉取完成,页面将自动刷新
同步操作将从 doocs/leetcode 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
给你一个 有序 数组 nums
,它由 n
个非负整数组成,同时给你一个整数 maximumBit
。你需要执行以下查询 n
次:
k < 2maximumBit
,使得 nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k
的结果 最大化 。k
是第 i
个查询的答案。nums
删除 最后 一个元素。请你返回一个数组 answer
,其中 answer[i]
是第 i
个查询的结果。
示例 1:
输入:nums = [0,1,1,3], maximumBit = 2 输出:[0,3,2,3] 解释:查询的答案如下: 第一个查询:nums = [0,1,1,3],k = 0,因为 0 XOR 1 XOR 1 XOR 3 XOR 0 = 3 。 第二个查询:nums = [0,1,1],k = 3,因为 0 XOR 1 XOR 1 XOR 3 = 3 。 第三个查询:nums = [0,1],k = 2,因为 0 XOR 1 XOR 2 = 3 。 第四个查询:nums = [0],k = 3,因为 0 XOR 3 = 3 。
示例 2:
输入:nums = [2,3,4,7], maximumBit = 3 输出:[5,2,6,5] 解释:查询的答案如下: 第一个查询:nums = [2,3,4,7],k = 5,因为 2 XOR 3 XOR 4 XOR 7 XOR 5 = 7。 第二个查询:nums = [2,3,4],k = 2,因为 2 XOR 3 XOR 4 XOR 2 = 7 。 第三个查询:nums = [2,3],k = 6,因为 2 XOR 3 XOR 6 = 7 。 第四个查询:nums = [2],k = 5,因为 2 XOR 5 = 7 。
示例 3:
输入:nums = [0,1,2,2,5,7], maximumBit = 3 输出:[4,3,6,4,6,7]
提示:
nums.length == n
1 <= n <= 105
1 <= maximumBit <= 20
0 <= nums[i] < 2maximumBit
nums
中的数字已经按 升序 排好序。前缀异或。
class Solution:
def getMaximumXor(self, nums: List[int], maximumBit: int) -> List[int]:
n = len(nums)
s = [0] * (n + 1)
for i, x in enumerate(nums):
s[i + 1] = s[i] ^ x
ans = []
for x in s[:0:-1]:
t = 0
for i in range(maximumBit):
if ((x >> i) & 1) == 0:
t |= 1 << i
ans.append(t)
return ans
class Solution {
public int[] getMaximumXor(int[] nums, int maximumBit) {
int n = nums.length;
int[] s = new int[n + 1];
for (int i = 0; i < n; ++i) {
s[i + 1] = s[i] ^ nums[i];
}
int[] ans = new int[n];
for (int i = n; i > 0; --i) {
int t = 0, x = s[i];
for (int j = 0; j < maximumBit; ++j) {
if (((x >> j) & 1) == 0) {
t |= (1 << j);
}
}
ans[n - i] = t;
}
return ans;
}
}
class Solution {
public:
vector<int> getMaximumXor(vector<int>& nums, int maximumBit) {
int n = nums.size();
vector<int> s(n + 1);
for (int i = 0; i < n; ++i) s[i + 1] = s[i] ^ nums[i];
vector<int> ans;
for (int i = n; i > 0; --i) {
int t = 0, x = s[i];
for (int j = 0; j < maximumBit; ++j) {
if (((x >> j) & 1) == 0) t |= (1 << j);
}
ans.push_back(t);
}
return ans;
}
};
func getMaximumXor(nums []int, maximumBit int) []int {
n := len(nums)
s := make([]int, n+1)
for i, v := range nums {
s[i+1] = s[i] ^ v
}
var ans []int
for i := n; i > 0; i-- {
t, x := 0, s[i]
for j := 0; j < maximumBit; j++ {
if ((x >> j) & 1) == 0 {
t |= (1 << j)
}
}
ans = append(ans, t)
}
return ans
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。