【LEETCODE初代アルゴリズム/ 1.3回転配列array

原題:

アレイ、右へ配列要素所与の  k個の 前記位置、  kは 非負です。

例1:

入力:[1,2,3,4,5,6,7]及びK = 3 
出力:[5,6,7,1,2,3,4]
説明:
右回転ステップ1:[7,1,2,3,4,5,6]
右には2つのステップ回転[6,7,1,2,3,4,5]
右ステップ3に回転を。[5,6,7,1,2,3,4]

例2:

入力:[-1,-100,3,99]及びK 2 = 
出力:[3,99、-1、-100] 
説明:
に回転右ステップ1:[99、-1、-100,3] 
右回転ステップ2:[3.99、 - 1 -100]

説明:

  • 限り多くの解決策を考え出すことができる限り、この問題を解決するには、少なくとも3つの異なる方法があります。
  • これは、スペースの複雑さはO(1)アルゴリズム、その場で必要です。

アイデア:クラスは、約最初の抗、抗再び最後にもう一度話をして、トランス。

第1のフリップフロッ前のNK桁、その後、k個の数字は、それを反転それを反転し、最終的に全体の配列の後に:

1 2 3 4 5 6 7
4 3 2 1 5 6 7
4 3 2 1 7 6 5
5 6 7 1 2 3 4

 

クラス解決{
 パブリックボイド回転(ベクトル< INT >&NUMS、int型K){
     int型 LEN = nums.size()。
    もし(LEN == 1つの || k個の== 0 
    { 
        返します
    } 
        K = K%LEN。
    INT、N = nums.size()。
        逆(nums.begin()、nums.end() - K); 
        逆(nums.begin() + N - K、nums.end())。
        逆(nums.begin()、nums.end())。
    
    
} 
}。

 

おすすめ

転載: www.cnblogs.com/William-xh/p/11530650.html