LEETCODE 1310. XOR Queries of a Subarray 解题思路分析

题目大意:

子数组异或查询

有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。

对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。

并返回一个包含给定查询 queries 所有结果的数组。

示例 1:

输入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
输出:[2,7,14,8] 
解释:
 数组中元素的二进制表示形式是:
 1 = 0001 
 3 = 0011 
 4 = 0100 
 8 = 1000 
 查询的 XOR 值为:
 [0,1] = 1 xor 3 = 2 
 [1,2] = 3 xor 4 = 7 
 [0,3] = 1 xor 3 xor 4 xor 8 = 14 
 [3,3] = 8

示例 2:

输入:arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
输出:[8,0,4,4]

提示:

  • 1 <= arr.length <= 3 * 10^4
  • 1 <= arr[i] <= 10^9
  • 1 <= queries.length <= 3 * 10^4
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] < arr.length

如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1310

解题思路分析:

这道题第一反应让我想到了前缀和数组。假如本题求的不是区间内的亦或值(xor),而是求区间内和的话,我们应该想到使用前缀和数组presum[]方式解题,先遍历一遍数组,求出所有区间[0, i](i>=0, i<arr.length)的区间和,然后对于任意区间[x, y]的和应该等于presum[y]-presum[x-1]。

同理,本题是亦或版本的前缀区间问题,先定义一个前缀亦或数组pre[],遍历一遍数组,求出所有区间[0, i](i>=0, i<arr.length)的亦或值,然后对于任意区间[x, y]的亦或值应该等于presum[y]^presum[x-1]。

实现代码:

public int[] xorQueries(int[] arr, int[][] queries) {
    int[] pre = new int[arr.length]; // 前缀亦或数组
    pre[0]=arr[0];
    // 求前缀亦或数组
    for(int i=1;i<arr.length;i++){
        pre[i] = (pre[i-1]^arr[i]);
    }
    // 返回结果
    int[] res = new int[queries.length];
    // 循环每一个区间
    for(int i=0;i<queries.length;i++){
        // 当前区间
        int[] q=queries[i];
        // 如果左区间为0,直接返回对应的前缀数组的值
        if(q[0]==0){
            res[i]=pre[q[1]];
        }else{
            // 反之通过前缀数组求解
            res[i]=pre[q[1]]^pre[q[0]-1];
        }
    }
    return res;
}

本题解法执行时间为1ms。

Runtime: 1 ms, faster than 100.00% of Java online submissions for XOR Queries of a Subarray.

Memory Usage: 55.7 MB, less than 100.00% of Java online submissions for XOR Queries of a Subarray.

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/leetcode-1310-xor-queries-of-a-subarray-解题思路分析/
此条目发表在leetcode分类目录,贴了, , , 标签。将固定链接加入收藏夹。

LEETCODE 1310. XOR Queries of a Subarray 解题思路分析》有3条回应

  1. Pingback引用通告: LEETCODE 1442. Count Triplets That Can Form Two Arrays of Equal XOR 解题思路分析 - LEETCODE从零刷LEETCODE从零刷

    发表评论

    您的电子邮箱地址不会被公开。