2017-07-07 10 views
0

ビット演算子でこの問題を解決することは可能ですか? 整数の配列が与えられた場合、2つの同じ番号を見つけて、それらのうちの1つを返します。たとえば、配列[7,3,5,6,7] answer 7です。問題がビットごとに解決できるときを理解しようとしています。これまでのところ、2で掛け算したり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 
関連する問題