在数组中查找一对数字是否可以用按位运算符解决
Find pair of numbers inside an array is it possible to solve with bitwise operators
这个问题可以用位运算符解决吗?
给定一个整数数组,找到两个相同的数字和 return 其中之一,例如在数组 [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 已经在评论中建议的那样,您可以使用嵌套的 for 循环来解决问题。
应该这样做:
function findIt(arr) {
var cmpValue, flag = 0;
for (var i = 0; i < arr.length; i++) {
cmpValue = arr[i];
for(var j = i + 1 ; j < arr.length ; j++){
if(cmpValue^arr[i] == 0){
flag=1;
break;
}
}
if(flag == 1){
break;
}
}
if(flag == 1){
return cmpValue;
}
else{
return 'no pairs found'
}
}
console.log(findIt([7,3,5,6,7))
> 7
console.log(findIt([3,3,5,6,7))
> 3
这个问题可以用位运算符解决吗? 给定一个整数数组,找到两个相同的数字和 return 其中之一,例如在数组 [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 已经在评论中建议的那样,您可以使用嵌套的 for 循环来解决问题。
应该这样做:
function findIt(arr) {
var cmpValue, flag = 0;
for (var i = 0; i < arr.length; i++) {
cmpValue = arr[i];
for(var j = i + 1 ; j < arr.length ; j++){
if(cmpValue^arr[i] == 0){
flag=1;
break;
}
}
if(flag == 1){
break;
}
}
if(flag == 1){
return cmpValue;
}
else{
return 'no pairs found'
}
}
console.log(findIt([7,3,5,6,7))
> 7
console.log(findIt([3,3,5,6,7))
> 3