【发布时间】:2017-07-08 05:23:35
【问题描述】:
是否可以用位运算符解决这个问题? 给定一个整数数组,找到两个相同的数字并返回其中一个,例如在数组 [7,3,5,6,7] 中,答案是 7。我试图了解何时可以按位解决问题。到目前为止,我知道如果我乘以或除以 2,我想使用左移乘以 2,右移以除以 2,如果我想取消匹配的数字,请使用 XOR。我在想我可以在第一个匹配对上退出一个循环,但我现在认为我不能。我试过这个。
function findIt(arr) {
var dog = 0;
for (var i = 0; i < arr.length; i++) {
if ((dog ^= arr[i]) == 0) {
dog =arr[i];
break;
}
}
return dog;
}
这不是家庭作业,我只是好奇地学习 javascript 中的按位运算。下面解决了香草溶液。
function findIt(arr) {
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (obj[arr[i]] === 1) {
return arr[i];
} else {
obj[arr[i]] = 1;
}
}
return 'no pairs found'
}
console.log(findIt([7,3,5,6,7))
【问题讨论】:
-
您的函数只会在它们彼此相邻的情况下找到相等的数字。这就是你想要的吗?
-
@barmar 不,我希望它在整个数组中搜索数字对,而不是在数字彼此相邻时搜索。在整个数组中找到唯一的一对。我将更改我的示例输入。
-
然后你需要使用嵌套循环,所以你将每个元素与其他元素进行比较。
标签: javascript bit-manipulation bitwise-operators