線形時間内の代替位置に2つのソートされた配列を有する配列と一定の間隔をソート

Antariksha Yelkawar:

これはインタビューで、今日私に頼まれた、5分間の質問を見つめた後、追い出されました。

アレイの所与Aをすべての奇数位置([のサブようにA 1A 3A 5([、...])とすべての偶数位置のサブシーケンスA 2A 4A 6、...])があります例えば、[1、7、2、8、3、9、4、10、5]又は[3、8、4、11、5]又は[5、2,7、4] - -ソートのソート順で各A O(IN N)時間とO(1)の空間(スタック領域と出力アレイスペースを含みます)。

私は私の脳をしぼっ最後の2時間のためにそれの上に私の友人のを選びました。Googleはどんな答えを得られませんでした。私はどんな意見を着色する必要はありませんが、これは与えられた複雑で解決することはできないかもしれないような気がします。

我々はこれをどのように解決することができますか?すべての入力が評価されています。

ギラッドBarkan:

非インタリーブ場合(1)2つの交互の配列が1つの単調シーケンスを形成することができ、場合のいずれか()配列は、第二の最小数を有するアレイを開始し、最も低い番号から始まり、奇数の長さである、または(b)配列(非インターリーブとき右側あろうもの)と偶数長さで、我々は、アルゴリズムを逆にすることができるかもしれないがでdecribed 内シャッフルのためのin-placeアルゴリズム単純(Peiyushジェイン、2008)

私たちは、サイクルのシフトに続いて、最初の「サイクルリーダー」配列を実行する必要があります。

例1

[1, 7, 2, 8, 3, 9, 4, 10, 5]
 1  2  3  4  5  6  7   8  9
 1  6  2  7  3  8  4   9  5

|1| unaffected

   |1     3                |
   m = 4; 2m = 3^2 - 1
   cycles start on 3^0, 3^1
   (4 swaps with 7 and the other
    numbers form a longer cycle.)

例2(シンプル):

[1, 5, 2, 7, 3]
 1  2  3  4  5
 1  4  2  5  3

|1| unaffected

   |          |
   m = 1
   cycle in 2m => 2, 5
   cycle in 2m => 3, 7
   cycle shift by m between 5 and 3
   => 2, 3, 5, 7

私はかかわらず、誰でも検索するには許可されずにインタビューでこれを考え出すことを期待しないでしょう:)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214307&siteId=1