2017-11-10 6 views
-2

私はA = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]のような配列を持っています。私は配列AからYを取り除き、ZTZTの位置を置き換えて0の位置に置き換えることによって)それらの位置を置き換えるアルゴリズムを書こうとしています。だから、私は得るだろう特定の場所で配列のサブセットを左にシフトする方法はありますか?

  • 元の配列はA = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]です。
  • 結果はA = [X, 0, X, Z, Z, 0, 0, T, T, 0, 0, 0, 0, 0, 0, 0, 0, 0]です。

私は次のことを試してみました:

  1. インデックスI={i: A[i] = Y}を見つけます。
  2. インデックスを見つけるJ={j: A[j] != 0 & j > max(I)}
  3. size(I)>=size(J)の場合は、iをループスルーIjループスルーJとします。
  4. A[i]=A[j]と設定し、両方をijとします。

私の問題はケースsize(I)<size(J)ですか?ここ

は別の例である:

  • 元の配列がA = [X, Y, Y, Y, Z, 0, T]です。
  • 結果はA = [X, Z, T, 0, 0, 0, 0]です。

別の例:

  • 元の配列がA = [X, Y, 0, Y, Z, T]あります。
  • 結果はA = [X, Z, 0, T, 0, 0]です。
+0

私は両方の 'Z 'を左にシフトするので。 – Ribz

+0

StackOverflowはあなた自身の問題を最初に解決しようとしています(http://meta.stackoverflow.com/questions/261592)。また、[宿題に関する質問に回答しない](https://softwareengineering.meta。 stackexchange.com/questions/6166)。既に試した内容を[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)に表示するために質問を更新してください。詳細については、[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を参照し、[サイトの見学]を受けてください(http://stackoverflow.com/tour ):) – Barmar

+0

私は試したことを書きましたが、これは宿題の問題ではありません。たぶん、あなたが見ているのは、pythonの部分です。私はその後Pythonを削除します。 – Ribz

答えて

1

アレイの1つの順方向パスでこれを実行できるはずです。

アイデアは、今、あなたはYを持っている配列の先頭から開始し、そこから最初のY.を探し、最初Z.を探しに行くと、そこから最初のT.

を探すことですインデックス、Zインデックス、およびTインデックスを含む。シフトを行い、ZをYの位置に、TをZの位置に移動させ、古いTの位置に0を入れます。

次に、Yインデックスを現在の位置から移動して次のYを見つけます。見つかったら、Zインデックスを次のZに移動し、Tインデックスを次のTに移動します。

最後の例のようにZがない場合は、Tインデックスを使用して次のTを見つけてYを置き換えます。

あなたがYを使い果たしたとき、あなたは完了です。だから、もしあなたが7人のYと3人だけのZとTを持っていればそれは重要ではありません。あなたがこれ以上の交換をすることができなくなったら、あなたはやめます。

実装はちょっと面倒ですが、上記の一般的な考え方はかなりシンプルです。

関連する問題