在数组中查找数字对可以使用按位运算符求解

时间:2017-07-07 18:25:58

标签: javascript bit-manipulation bitwise-operators

使用按位运算符可以解决这个问题吗? 给定一个整数数组,找到两个相同的数字并返回其中一个,例如在数组[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))

1 个答案:

答案 0 :(得分:1)

正如@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