私は、文字列の2列があります:1つの秩序配列 - 配列X、及び1つの順不同配列 - 配列Y配列のソート - とマージ - アルゴリズム
新しい配列が持つべき何を:すべての項目は、配列のみからでなければなりませんYとXとYの間に重なるものは、Xの順序に基づいて順序付けされ、残りがあればYの元の順序と同じ順序で終了する必要があります。 XにはYにないエントリが含まれているため、無視するだけです。
これを行う効率的な方法は何ですか(PHPで)?
例:
配列X:{ 'A'、 'Z'、 'Q'、 'D'}
配列Y:{ 'B'、 'C'、 'A'、 'D'、 'Z'}
結果:{ 'A'、 'Z'、 'D'、 'B'、 'C'}
だからアイデアは次のとおりです。私たちは第二を取りたいです配列Y(配列Y)を作成し、配列Xで与えられた順序に基づいて要素をソートします。配列Yには余分な要素があるかもしれませんので、これらの余分な要素を新しい配列の最後に配置したいだけです。意味がありますか?
$result = array();
// build index array for constant lookup
$indexY = array_flip($y);
// test for each value in X whether it is in Y
foreach ($x as $valueX) {
if (isset($indexY[$valueX])) {
$result[] = $valueX;
// remove it from the index so we know which values remain
unset($indexY[$valueX]);
}
}
// append remaining values
foreach ($indexY as $valueY => $i) {
$result[] = $valueY;
}
更新これは間違いなく最も簡潔な解決策ではなく、実行時の複雑さが言及した他の人には逆に、Ο(N)である:
あなたは、例えば、入力配列と出力例を与えることができますか?あなたの説明はちょっと難しいです。 – Nick
例を追加しました。ありがとう、ありがとう、 – user809240