請求
三つの要素の配列をソートするための唯一の0,1,2
思考
方法1:(2回トラバース)補助アレイ三の要素数を保持し、アレイを横断し、その後書き込み
方法2:アナログ三方高速行は、再度配列決定されてトラバース
実現
方法1
1 空隙 sortColors(ベクトル< INT >&NUMS){ 2 INTの数[ 3 ] = { 0 }。 3 用(INTは iは= 0 ; I <nums.sizeを(); I ++ ){ 4 アサート(NUM [I]> = 0 && NUMS [I] <= 2 )。 5 カウント数[NUMS [I]] ++ ; 6 } 7 8 int型のインデックス= 0 。 9 用(INTは iは= 0 ; I <回数[ 0]; I ++ ){ 10 NUMS [インデックス++] = 0 ; 11 のために(INTは iは= 0 ; I <カウント[ 1 ]; I ++ ){ 12 NUMS [インデックス++] = 1 。 13 のために(INTは iは= 0 ; I <カウント[ 2 ]; I ++ ){ 14 NUMS [インデックス++] = 2 ; 15 } 16 }
方法2
1 空隙 sortColors1(ベクトル< INT >&NUMS){ 2 INTゼロ= - 1 。 3 INT 2 = nums.size()。 4 のための(INT iが= 0 ; I < 2であり;){ 5 であれば(NUMS [I] == 1 ) 6 I ++ 。 7 それ以外 なら(NUMS [I] == 2 ){ 8 2 - 。 9 スワップ(NUMS [I]、NUMS [2])。 10 } 他{ 11 アサート(NUMS [I] == 0 )。 12 ゼロ++ 。 13 スワップ(NUMS [ゼロ]、NUMS [I])。 14 I ++ ; 15 } 16 } 17 }
同様の問題
配列内の215 K番目の最大の要素