algorithm-problem-leetcode-3277
给你一个由 n
个整数组成的数组 nums
,以及一个大小为 q
的二维整数数组 queries
,其中 queries[i] = [li, ri]
。
对于每一个查询,你需要找出 nums[li..ri]
中任意
子数组
的 最大异或值。
数组的异或值 需要对数组 a
反复执行以下操作,直到只剩一个元素,剩下的那个元素就是 异或值:
- 对于除最后一个下标以外的所有下标
i
,同时将a[i]
替换为a[i] XOR a[i + 1]
。 - 移除数组的最后一个元素。
返回一个大小为 q
的数组 answer
,其中 answer[i]
表示查询 i
的答案。
示例 1:
输入: nums = [2,8,4,32,16,1], queries = [[0,2],[1,4],[0,5]]
输出: [12,60,60]
解释:
在第一个查询中,nums[0..2]
的子数组分别是 [2]
, [8]
, [4]
, [2, 8]
, [8, 4]
, 和 [2, 8, 4]
,它们的异或值分别为 2, 8, 4, 10, 12, 和 6。查询的答案是 12,所有异或值中的最大值。
在第二个查询中,nums[1..4]
的子数组中最大的异或值是子数组 nums[1..4]
的异或值,为 60。
在第三个查询中,nums[0..5]
的子数组中最大的异或值是子数组 nums[1..4]
的异或值,为 60。
示例 2:
输入: nums = [0,7,3,2,8,5,1], queries = [[0,3],[1,5],[2,4],[2,6],[5,6]]
输出: [7,14,11,14,5]
提示:
1 <= n == nums.length <= 2000
0 <= nums[i] <= 2^31 - 1
1 <= q == queries.length <= 10^5
queries[i].length == 2
queries[i] = [li, ri]
0 <= li <= ri <= n - 1
区间dp套区间dp
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BUGHERE の 博客!
评论