题解 | #牛的编号异或问题# 前缀异或和

牛的编号异或问题

https://www.nowcoder.com/practice/b8139d2af0f64e6489f69cb173f170c1

知识点

前缀异或和

思路

题目样例有问题,给出5,7要求的是6^7=1即[left+1, right]的区间异或和

我们可以把区间异或和转化为前缀异或和的差,所以只需要实现函数get(x)来求0到x的异或和

我们观察到结果是具有规律性的:

  • 当x%4为0时结果是x
  • 当x%4为1时结果是1
  • 当x%4为2时结果是x+1
  • 当x%4为3时结果是0

因此我们可以在O(1)时间内计算得到结果

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param left int整型 
     * @param right int整型 
     * @return int整型
     */
    int rangeBitwiseXor(int left, int right) {
        return get(right) ^ get(left);
    }
    int get(int x) {
        int t = x % 4;
        if (t == 0) return x;
        if (t == 1) return 1;
        if (t == 2) return x + 1;
        return 0;
    }
};

全部评论

相关推荐

小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
07-08 13:48
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务