【问题标题】:Find pair of numbers inside an array is it possible to solve with bitwise operators在数组中查找一对数字是否可以使用按位运算符解决
【发布时间】: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


【解决方案1】:

正如@Barmar 在 cmets 中已经建议的那样,您可以使用嵌套的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-31
    • 1970-01-01
    • 2011-04-24
    • 2011-11-05
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多