A:問題解決のためのアイデア
第一の方法:元の配列と新しい配列と同じ大きさの新しいアプリケーション。新しい配列に反転すること、及び残りの図は、新しい配列にコピーされた第1のデジタルコピー。最後に、コピー元の配列にこの全体の新しい配列。時間:O(n)は、スペース:O(n)は、
第二の方法:最初に、アレイ全体が反転し、逆回転部、及び反転の最後に残り。時間:O(n)は、スペース:O(1)
2:完全なコード例(C ++版、Java版)
最初の方法C ++:
クラス解決{ パブリック: ボイド回転(ベクトル< INT >&NUMS、INT K) { 場合(nums.size()== 0 || K <= 0)リターン; INT、N = nums.size()。 INT、M = K%N。 int型私は= 0を。 ベクター < INT > T(N、0 ); 用(INT J = N - M; J <N; J ++)T [I ++] = NUMS [J]。 以下のための(int型 J =0 ; J <N - M。J ++)T [I ++] = NUMS [J]。 用(INT J = 0 ; nはJ <; J ++)NUMS [J] = T [J]。 } }。
第一の方法のJava:
クラスソリューション{ 公共 ボイド回転(INT [] NUMS、INT K) { 場合(NUMS == NULL || nums.length == 0 || K <= 0)リターン; INT、N = nums.length。 INT、M = K%N。 INT [] T = 新しい INT [N]。 int型私は= 0を。 用(INT J = nmであり、j <N; J ++)T [I ++] = NUMS [J]。 以下のための(int型 J = 0; J <NM; J ++)T [I ++] = NUMS [J]。 用(INT J = 0 ; nはJ <; J ++)NUMS [J] = T [J]。 } }
第二の方法C ++:
クラス解決{ パブリック: ボイド逆(ベクトル< INT >&NUMS、int型 I、INT J) { ため(; I <J、I ++、j-- ) { int型の TEMP = NUMS [I]。 NUMS [I] = NUMS [J]。 NUMS [J] = TEMP。 } } ボイド回転(ベクトル< INT >&NUMS、INT K) { 場合(nums.size()== 0 || K <= 0)リターン; INT、N = nums.size()。 INT、M = K%N。 逆(NUMS、0、N- 1 )。 逆(NUMS、0、M- 1 )。 逆(NUMS、M、N - 1 )。 } }。
第二の方法のJava:
クラスソリューション{ プライベート ボイド逆(INT [] NUMS、int型 I、INT J) { ため(; I <jは、I ++、j-- ) { int型の TEMP = NUMS [I]。 NUMS [I] = NUMS [J]。 NUMS [J] = TEMP。 } } 公共 ボイド回転(INT [] NUMS、int型K) { 場合(NUMS == NULL || nums.length == 0 || K <= 0)リターン; INT、N = nums.length。 INT、M = K%N。 逆(NUMS、0、N- 1 )。 逆(NUMS、0、M- 1 )。 逆(NUMS、M、N - 1 )。 } }