同じ色のオブジェクトが隣接するように、白、青、赤の色で、ソートそれらインプレース、順に有するアレイ所与N、赤、白または青色オブジェクト。
ここで、我々は、それぞれ色の赤、白、青を表すために整数0、1を使用し、2う。
注:この問題のためのライブラリのソート機能を使用すると仮定されていません。
例:
入力:[2,0,2,1,1,0]
出力:[0,0,1,1,2,2]
フォローアップ:
むしろ単純溶液は、計数ソートを使用して2つのパス・アルゴリズムです。
まず、反復0、1'S、2'S、次いで0、1と2つの続いての総数と、その後上書きアレイのアレイカウント数。
あなただけの一定のスペースを使用して1パスアルゴリズムを考え出すだろうか?
func sortColors(nums []int) {
l := 0
r := len(nums) - 1
for i := 0; i < len(nums); i++ {
if nums[i] == 0 {
nums[l], nums[i] = nums[i], nums[l]
l++
} else if nums[i] == 2 && i < r {
nums[r], nums[i] = nums[i], nums[r]
r--
i--
}
}
}