Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 所有整数的异或_Javascript_Xor - Fatal编程技术网

Javascript 所有整数的异或

Javascript 所有整数的异或,javascript,xor,Javascript,Xor,我是一名jr网络开发人员,试图提高我的逻辑/算法技能,在学习的过程中,我发现了如下所示的编码挑战,对于这类问题,你能为我指出正确的方向吗?我的意思是,我应该学习、检查、回顾什么?对于下面的挑战,你能给我一个如何解决它的想法吗,也许是一些伪代码 挑战: 您将得到Q查询。每个查询包含两个整数L和R。 对于每个查询,打印给定范围内的所有整数的异或,这些整数的二进制表示中只有一位 输入格式: 第一行包含Q查询 接下来的Q行包含两个整数L和R 输出格式: 为表示答案的每个查询打印一个整数 限制条件:

我是一名jr网络开发人员,试图提高我的逻辑/算法技能,在学习的过程中,我发现了如下所示的编码挑战,对于这类问题,你能为我指出正确的方向吗?我的意思是,我应该学习、检查、回顾什么?对于下面的挑战,你能给我一个如何解决它的想法吗,也许是一些伪代码

挑战:

您将得到Q查询。每个查询包含两个整数L和R。 对于每个查询,打印给定范围内的所有整数的异或,这些整数的二进制表示中只有一位

输入格式:

  • 第一行包含Q查询
  • 接下来的Q行包含两个整数L和R
输出格式:

为表示答案的每个查询打印一个整数

限制条件:

一,≤ Q≤ 105
1.≤ L≤ R≤ 1018

样本输入

1
60-130

样本输出

192

到目前为止,我所尝试的:

const sumQuery = (q, n) => {
  let bitCount = [];
  //travers the bits
  for(let i = 0; i < 32; i++) {
    for(let j = 0; j < n; j++) {
     // check whether the current bit is
     let temp = Math.sqrt(arr[j]) * 2 );
     if(temp % 2 !== 0 ) {
      console.log(temp)
     }
    }
  }
} 

constsumQuery=(q,n)=>{
让比特计数=[];
//遍历位
for(设i=0;i<32;i++){
for(设j=0;j
你的问题有两个部分,我将尝试分别回答这两个部分

1) 你应该学习什么来提高你的逻辑/算法技能? 首先,你应该确定你这样做的目的(试图找到一份更好的工作/构建cs基础知识/学习特定系统或框架如何运作等等)。一旦你弄清楚你想要提高的确切原因,你就更容易确定你需要收集什么样的知识/技能。以下是我提到的路径的一些建议:

a) 想找一份更好的工作。如果是这样的话,我唯一的建议就是练习你的编码面试问题。你的知识深度往往不如你在面试中解决这些问题的能力(基于我的个人经验)重要。您可以从以下几个地方开始:

  • 破解编码面试(书)
b) 在CS中建立基础。有几种方法可以做到这一点(包括上学)。如果您正在寻找一个项目,我的建议如下:

  • 免费完整的计算机科学课程大纲()
  • 著名的麻省理工学院免费课程()
  • Coursera()中的付费数据结构和算法跟踪
c) 更好地理解某些系统。为此,我强烈建议您通读系统实现,或者对其进行更深入的指导。建议:

  • 可以通读和理解的伟大js库-不可变js()
  • Rails教程()
2) 如何解决您的特定编码难题。下面是一个由其他人描述的80%挑战的详细分类()。 我建议您对二进制数据和整数间异或的概念有深入的了解

可能的解决步骤(我不会在js中为您写出来,因为您想自己解决):

  • 正如Maaz Syed Adeeb所提到的,在搜索给定整数范围之间的异或时,只需考虑2的幂(因为它们是唯一具有一位二进制表示的整数)
  • 注意给定约束中2的所有幂
    valid=[1,2,4,8,16,32,64,128,256,512]
  • 确定哪些在给定范围内
  • 将每个
    有效的
    整数转换为二进制
  • 使用此逻辑查找每个
    有效
    整数之间的异或
  • 将上次异或比较中的二进制代码转换为整数

祝你好运

只有2的幂在其二进制表示中才有一位。因此,1、2、4、8、16、32、64、128、256、512是您需要关心的唯一数字。对于示例测试用例,它是64^128=192,您可以建议在js中使用XOR运算符,即^。因此,可以避免最后3个步骤,只对范围内的数字进行异或运算。谢谢你,玛兹!我只是认为为OP自己做这些步骤,将是编写这种逻辑的一个伟大实践。然而-你是对的,我应该告诉你,
^
操作符就是为了这个目的而存在的。对此我很抱歉,玛兹,阿尔特姆,谢谢你们两位!我现在看一下按位AND,OR和XOR,一开始我不知道如何解决这个挑战。我还在leetcode中的一节中看到了
^
的使用……现在挑战看起来没有那么困难:)很高兴,我们可以帮助:)
Rule 1 : If both bits are 1 then XOR’ed bit will be 0.
Rule 2 : If both bits are 0 then XOR’ed bit will be 0.
Rule 3 : If one bit is 0 and one bit is 1 XOR’ed bit will be 1.