P48は、後方ゼロ(leetcode 283)に移動しました

A:問題解決のためのアイデア

方法:カーソル速度を使用して、方法、非ゼロ要素、高速カーソル点非ゼロ要素の挿入位置に遅いポインタ。カーソルがゼロの要素を指すように迅速である場合は、バック1を移動したり、他のアサイン速いカーソルが遅いカーソルが指している要素に要素を指しています。

方法2:同じ方法を使用してカーソル速度、場合カーソルポイント位置が後方に向け顔ときにゼロでない要素、及び相互交換素子遅いカーソルポインティング移動速いゼロ要素。

O(N)、宇宙:O(1)時間は、2つの方法が上記

2:完全なコード例(C ++版、Java版)

方法1個のC ++:

クラスのソリューション
{ 
パブリック moveZeroes(ベクトル< int型 >&NUMS)
    { 
        場合(nums.size()== 0リターンint型遅い= 0 ; 

        INT ;高速<nums.size();高速=低速高速++ 
        { 
            場合(NUMS [速い]!= 0 
            { 
                NUMS [遅い ++] = NUMS [速いです]。
            } 
        } 

        一方(遅い< nums.size())
        {
            NUMS [遅い ++] = 0 ; 
        } 
    } 
}。

この方法の一つのJava:

クラスソリューション
{ 
    公共 ボイド moveZeroes(INT [] NUMS)
    { 
          場合(NUMS == NULL || nums.length == 0のリターン;
          int型遅い= 0 ; 
          
          INT ;高速<nums.length、高速=低速高速++ 
          { 
              場合(NUMS [速い]!= 0 
              { 
                  NUMS [遅い ++] = NUMS [速いです]。
              } 
          } 
          
          一方(遅い< nums.length) 
          {
              NUMS [遅い ++] = 0 ; 
          } 
    } 
}

メソッドの2つのC ++:

クラス解決{
 パブリックボイドスワップ(INT&、INT&B){ int型 C = A。A = B。B = C。} 

    ボイド moveZeroes(ベクトル< INT >&NUMS)
    { 
        場合(nums.size()== 0のリターン;
        int型遅い= 0 ; 

        INT迅速=遅い、速い<nums.size();高速++ 
        { 
            場合(!NUMS [速い] = 0 
            { 
                スワップ(NUMS [遅い ++]、NUMS [高速])。
            } 
        } 
    } 
}。

この方法の2つのJava:

クラスソリューション
{ 
    公共 ボイド moveZeroes(INT [] NUMS)
    { 
          場合(NUMS == NULL || nums.length == 0のリターン;
          int型遅い= 0 ; 
          
          INT ;高速<nums.length、高速=低速高速++ 
          { 
              場合(NUMS [速い]!= 0 
              { 
                  int型 TEMP = NUMS [速いです]。
                  NUMS [速い] = NUMS [遅いです]。
                  NUMS [遅い] = TEMP。
                  遅い ++ ; 
              } 
          } 
    } 
}

 

おすすめ

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