、赤、白、青、合計n個の配列の要素、in situでそれらをソートし、同じ色を持つように隣接する素子と、赤、白、青の順に配置所与。
この問題は、我々は、赤、白、青を表す0、1、2の整数を使用します。
クラスソリューション:
デフsortColors(自己、NUMS:リスト[INT]) - >なし:
「」」
何かを返す代わりに、インプレースNUMSを変更しないでください。
「」」
right_boundary_of_0 = 0
left_boundary_of_2 = LEN(NUMS) - 1
私は= 0
私しばらく<= left_boundary_of_2:
NUMS [I] == 0の場合:
middleValue = NUMS [right_boundary_of_0]
NUMS [right_boundary_of_0] = 0
NUMS [I] = middleValue
right_boundary_of_0 + = 1 ****************** 1
I + = 1 ****************** 1
elifのNUMS [I] == 2:
middleValue = NUMS [left_boundary_of_2]
NUMS [left_boundary_of_2] = NUMS [I]
NUMS [I] = middleValue
left_boundary_of_2 - = 1
そうしないと:
I + = 1
印刷(I、right_boundary_of_0、left_boundary_of_2、NUMS)
思考の問題を解決するために配置します。
1. 3つのポインタが0の境界が、境界2、現在の反復の値、残されCURながら<= right_boundary_of_2。
なぜなら変更の過去がゼロに2.コードマークに二行、および0のみを呼び出した後に残ったが、私は++、それはゴールの左に0に達します。
実際には、ここで私はまだ後でたかった、非常に理解して考えました