原題:
アレイ、右へ配列要素所与の 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())。 } }。