2017-07-07 30 views
0

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

+0

你的函数只能找到数量相等。那是你要的吗? – Barmar

+0

@barmar不,我希望它通过整个数组搜索一个数字对,而不是如果数字相邻。找到整个阵列中唯一的一对。我会改变我的示例输入。 –

+0

然后,您需要使用嵌套循环,以便将每个元素与其他每个元素进行比较。 – Barmar

回答

1

由于@Barmar在评论已经建议你可以使用嵌套的解决问题的循环。

像这样的东西应该做的:如果他们彼此相邻

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 
相关问题