Sunday, May 15, 2016

Codility Cyclic Rotation Solution C#

Codility Cyclic Rotation Solution C#

Solution: 


public static int[] Solution(int[] A, int K)
        {
            int l = A.Length;
            int start = l - K;
            int [] outA = new int [l];
            int j = 0;
            if (l == 0 || K == 0)
            {
                return A;
            }
            if (start < 0)
            {
                start = -(start - 1);
            }
            for (int i = start; i < l; i++)
            {
                outA[j] = A[i];
                j++;
            }
            for (int m = 0; m < start; m++)
            {
                outA[j] = A[m];
                j++;
            }
            return outA;

        }



And here goes the result: 






3 comments:

  1. Seems like the constraint: "each element of array A is an integer within the range [−1,000..1,000]." have not effect in the solution.
    I would definitely use LinQ if that's okay:
    A.Skip((K-1) % A.Length).Concat(A.Take((K-1) % A.Length))
    The modulus controls multiple turnaraounds of the array. The K-1 is cueing so the result example is correct.

    BTW: The proposed solution rotate the array in the wrong direction.

    ReplyDelete
    Replies
    1. @nymarco - Thanks for your input. But I have tested the solution in codility and the result is also pasted.

      Delete
  2. class Solution {
    public int[] solution(int[] A, int K) {
    // write your code in C# 6.0 with .NET 4.5 (Mono)
    for (var i = 0; i < K; i++) {
    for (var j = A.Length - 1; j > 0; j--) {
    var temp = A[j];
    A[j] = A[j-1];
    A[j-1] = temp;
    }
    }
    return A;
    }
    }

    this solution scored 100% also

    ReplyDelete