前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LintCode 1652. 区间异或 II

LintCode 1652. 区间异或 II

作者头像
Michael阿明
发布2020-07-13 17:17:32
7530
发布2020-07-13 17:17:32
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

给定数组 A(下标从0到n-1,n为数组长度),和一个查询列表。 每一项查询包括两个整数 i 和 k。 对于每次查询,计算Ai, A(i + 1), ..., A(i+k-1)的异或值。结果保存在列表中。

代码语言:javascript
复制
样例1
输入: A = [1,2,3,4] and query = [(0,2),(1,2)]
输出: [3,1]
解释:
1 ^ 2 = 3
2 ^ 3 = 1

样例2
输入: A = [1,2,4,8] and query = [(0,3),(1,3)]
输出: [7,14]
解释:
1 ^ 2 ^ 4 = 7
2 ^ 4 ^ 8 = 14

注意事项
在大部分编程语言中你可以使用 '^'来进行异或运算。
数组长度小于1000,查询次数小于1000。
保证Ai<1000,k>0,i+k-1<n。

2. 解题

  • 计算前缀异或值
  • 放了方便边界处理,前后各加一个0,0与其他异或不改变别人
  • 对区间两端点的前缀异或值异或,即得到区间内元素的异或值
代码语言:javascript
复制
/**
 * Definition of Interval:
 * classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 * }
 */

class Solution {
public:
    vector<int> intervalXOR(vector<int> &A, vector<Interval> &query) {
        int s = 0;
        A.insert(A.begin(),0);
        A.push_back(0);
        for(int i = 0; i < A.size(); ++i)
        {
        	s ^= A[i];
        	A[i] = s;
        }
        vector<int> ans;
        for(int i = 0; i < query.size(); ++i)
        {
        	ans.push_back(A[query[i].start]^A[query[i].start+query[i].end]);
        }
        return ans;
    }
};

100% 数据通过测试 总耗时 50 ms 您的提交打败了 96.69% 的提交!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档