Javascript 所有整数的异或
我是一名jr网络开发人员,试图提高我的逻辑/算法技能,在学习的过程中,我发现了如下所示的编码挑战,对于这类问题,你能为我指出正确的方向吗?我的意思是,我应该学习、检查、回顾什么?对于下面的挑战,你能给我一个如何解决它的想法吗,也许是一些伪代码 挑战: 您将得到Q查询。每个查询包含两个整数L和R。 对于每个查询,打印给定范围内的所有整数的异或,这些整数的二进制表示中只有一位 输入格式:Javascript 所有整数的异或,javascript,xor,Javascript,Xor,我是一名jr网络开发人员,试图提高我的逻辑/算法技能,在学习的过程中,我发现了如下所示的编码挑战,对于这类问题,你能为我指出正确的方向吗?我的意思是,我应该学习、检查、回顾什么?对于下面的挑战,你能给我一个如何解决它的想法吗,也许是一些伪代码 挑战: 您将得到Q查询。每个查询包含两个整数L和R。 对于每个查询,打印给定范围内的所有整数的异或,这些整数的二进制表示中只有一位 输入格式: 第一行包含Q查询 接下来的Q行包含两个整数L和R 输出格式: 为表示答案的每个查询打印一个整数 限制条件:
- 第一行包含Q查询
- 接下来的Q行包含两个整数L和R
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) 想找一份更好的工作。如果是这样的话,我唯一的建议就是练习你的编码面试问题。你的知识深度往往不如你在面试中解决这些问题的能力(基于我的个人经验)重要。您可以从以下几个地方开始:
- 破解编码面试(书)
- 免费完整的计算机科学课程大纲()
- 著名的麻省理工学院免费课程()
- Coursera()中的付费数据结构和算法跟踪
- 可以通读和理解的伟大js库-不可变js()
- Rails教程()
- 正如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.