LoginSignup
0
0

More than 1 year has passed since last update.

[100%] CyclicRotation (codility lessons)

Last updated at Posted at 2020-12-19

Painless

CyclicRotation

配列を指定されたステップ数だけ右に回転させます。
image.png

タスクの説明

N個の整数からなる配列Aが与えられます。配列の回転とは、各要素が1つのインデックスだけ右にシフトされ、配列の最後の要素が最初の場所に移動されることを意味します。たとえば、配列A = [3、8、9、7、6]の回転は[6、3、8、9、7]です(要素は1つのインデックスだけ右にシフトされ、6は最初の場所に移動されます)。

目標は、配列AKをK回回転させることです。つまり、Aの各要素は右にK回シフトされます。

関数を書く:

クラスSolution {public int [] solution(int [] A、int K); }

これは、N個の整数と整数Kで構成される配列Aが与えられた場合、K回回転した配列Aを返します。

たとえば、与えられた

A = [3、8、9、7、6]
K = 3

関数は[9、7、6、3、8]を返す必要があります。 3つのローテーションが行われました。

[3、8、9、7、6]-> [6、3、8、9、7]
[6、3、8、9、7]-> [7、6、3、8、9]
[7、6、3、8、9]-> [9、7、6、3、8]

別の例として、

A = [0、0、0]
K = 1

関数は[0、0、0]を返す必要があります

与えられた

A = [1、2、3、4]
K = 4

関数は[1、2、3、4]を返す必要があります

と仮定する:

  • NとKは、[0..100]の範囲内の整数です。
  • 配列Aの各要素は、[-1,000..1,000]の範囲内の整数です。

あなたの解決策では、正しさに焦点を合わせます。ソリューションのパフォーマンスは、評価の焦点にはなりません。


解く

image.png

Program

CyclicRotation.java

CyclicRotation.java
    public int[] solution(int[] A, int K) {
        int N = A.length;
        int[] B = new int[N];

        if (N > 0 && K > 0) {
            ArrayList<Integer> arrayB = new ArrayList<Integer>();

            for (int i = 0; i < N; i++) {
                arrayB.add(A[i]);
            }

            for (int j = 0; j < K; j++) {
                arrayB.add(0, arrayB.get(arrayB.size() - 1));
                arrayB.remove(arrayB.size() - 1);
            }

            for (int k = 0; k < arrayB.size(); k++) {
                B[k] = (int) arrayB.get(k);
            }
        } else {
            B = A;
        }

        return B;
    }

junit

CyclicRotationTest.java

Report

Candidate Report: training6HJBYX-26F


See also: CodilityのLessonsをすべて解く(更新中)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0