p53の回転アレイ(leetcode 189)

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 )。
    } 
}

 

おすすめ

転載: www.cnblogs.com/repinkply/p/12513841.html