2011-02-03 1 views
1

可能性の重複:
Finding a single number in a list配列内の奇数項目(ペアなし)を見つけるアルゴリズムはありますか?

偶数回表示され、すべてが、そのうちの一つの整数の配列、与えられた良いアルゴリズムは何だ、表示された1つの整数を見つけます奇数回。

二分探索の行に沿った何かが、n/2サイズの2つの小さな配列の合計要素のように、おそらく何かを再帰的に調べるでしょうか?

編集:

このXORアルゴリズムが実際に{1,1,4,4,7,7,5,8,8,9,9}と仮定していますか?私の入力はrandmonでもかまいません - {1,4,1,8,9,5,4,5,9,8}。その場合、ロジックは変わりますか?

+0

ああ私は同じボールの例のように、奇数以外の要素が同じであると間違っていたので、このバイナリ検索を提案しました。この場合バイナリはおそらく良いでしょう! XORは面白そうです。 – Nishant

+0

要素がランダムに格納されているが1つがODDの場合は、このXORアルゴリズムが機能しますか? – Nishant

+0

自分で手作業で試してみると、それがどのように動作するかを見るのに役立ちます。 – AakashM

答えて

10

XORすべての配列要素。結果は、奇数回繰り返す要素になります。

+0

要素がランダムに格納されている場合、これが当てはまりますか?ペアだけではない? – Nishant

+1

@Nishant:要素の順序は関係ありません。自分で試してみる 'arr = [1 2 3 2 1]' – codaddict

2

xorまたは配列内のすべての項目。

3

排他的またはすべて一緒に

2

おい、すべての整数の集合でxorを実行します。特定の整数が奇数回出現する場合、これは結果になります

3

ちょうどxor配列内のすべての数字。結果は奇数回に現れる数です。同じ番号のxorの番号が0であるため、これは当てはまります。あなたもそれを実行する場合、結果は再び0です。しかし、それを奇数回実行すると、結果は0 xor number = numberになります。

7

要素をXORします。各数字は一度表示されるので、それを表すビットは前後に切り替えられ、2回表示されなかった唯一の数字を表すビットだけが残されます。

[TestMethod] 
public void SumOfPairs() 
{ 
    var nums = new[] { 1, 1, 4, 4, 7, 7, 5, 8, 8, 12, 12 }; 
    int i = 0; 
    foreach (var num in nums) 
    { 
     i ^= num; 
    } 

    Assert.AreEqual(5, i); 
} 

指定した正確な条件が存在しない限り、これは機能しません。

関連する問題